2

有以下简单的 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 日吧?

4

1 回答 1

5

这是时区问题。

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);
于 2013-05-05T08:24:01.783 回答