有以下简单的 PHP 代码:
$day = '2013-05-04';
$disp_day = DateTime::createFromFormat('U', strtotime($day));
echo $day . " " . $disp_day->format('F j');
它输出
2013-05-04 May 3
但$disp_date
应该是 5 月 4 日吧?
有以下简单的 PHP 代码:
$day = '2013-05-04';
$disp_day = DateTime::createFromFormat('U', strtotime($day));
echo $day . " " . $disp_day->format('F j');
它输出
2013-05-04 May 3
但$disp_date
应该是 5 月 4 日吧?
这是时区问题。
strtotime
将为您提供一个时区敏感时间戳,而createFromFormat
使用U
参数会将时间戳解释为 GMT。
我猜你的时区是印度 (GMT + 5.5)。因此,strtotime("2013-05-04")
将为您提供印度的时间戳2013-05-04 00:00
。然而,在格林威治标准时间,比格林威治标准时间早五个半小时,时间是 2013-05-03 18:30
.
然后,您将此印度时间戳作为 GMT传递给 CreateFromFormat,从而导致转变。
这里根本不需要使用strtotime
:只要做
DateTime::createFromFormat('Y-m-d', $day);