我在尝试使用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()并以正确的格式显示日期,我需要做些什么?谢谢!
发布于 2012-02-07 15:47:59
gmmktime()
假定输入的日期/时间是格林尼治标准时间,并使用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
。在您的示例中,您的服务器似乎落后于格林尼治标准时间,所以对于您使用此函数创建的每个日期,都将转换为晚于指定日期的-nnnn小时数;对于00:00GMT作为输入,这实际上意味着您将获得之前的日期。
解决方法很简单,使用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
https://stackoverflow.com/questions/9179188
复制相似问题