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

时间:2012-02-07 15:42:22

标签: php date datetime

我在尝试使用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()并以正确的格式显示我的日期?谢谢!

1 个答案:

答案 0 :(得分:1)

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

<?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