gmmktime-使用date()函数转换后休息一天


gmmktime - one day off after converting with date() function

我在尝试使用gmmktime()从一些用户输入中确定日期时遇到了一个奇怪的问题。当我将日期转换为输出日期时,它似乎总是显示我的日期落后一天。我有一个日期选择,我使用月份、年份和日期下拉选择器的输入来转换日期。

在我的代码中,我有:

$inputDate = gmmktime(0,0,0,02,07,2012,0);
$inputDate = date("M d Y", $inputDate);

当输出时,显示的日期是2012年2月6日,而不是2012年2月份7日。但是,如果我将gmmktime()更改为仅mktime(,则日期是正确的,并且显示为第7天。

有人能解释一下为什么会发生这种情况,以及我需要做什么才能使用gmmktime()并以正确的格式显示我的日期吗?谢谢

gmmktime()假设输入的日期/时间是GMT,并使用php.ini中的date.timezone设置自动将其转换为服务器时间。在我的系统上,即+0500 GMT,我得到:

<?php
$inputDate = gmmktime(0, 0, 0, 2, 7, 2012);
echo date("M d Y H:i:s O", $inputDate);
// Feb 07 2012 05:00:00 +0500

请注意,我将0, 0, 0作为时间传递给函数,但最终得到了05:00:00。在您的情况下,您的服务器似乎比GMT晚,因此您使用此功能创建的每个日期都将被转换为比指定日期晚-nnnn小时;对于00:00 GMT作为输入,这实际上意味着您获得了上一个日期。

解决方法很简单,使用gmdate()函数显示使用gmmktime():创建的日期

<?php
$inputDate = gmmktime(0,0,0,2,7,2012);
echo gmdate("M d Y H:i:s O", $inputDate);
// Feb 07 2012 00:00:00 +0000