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