我在尝试使用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