PHP使用DateTime将日期转换为时间戳减少1天 - 很奇怪

时间:2013-05-05 08:18:08

标签: php

拥有以下简单的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号吗?

1 个答案:

答案 0 :(得分:5)

这是一个时区问题。

strtotime会为您提供时区敏感时间戳,而带有createFromFormat参数的U会将时间戳解释为GMT。

  • 我猜你的时区是印度(GMT + 5.5)。因此,strtotime("2013-05-04")会为您提供 India 2013-05-04 00:00的时间戳。但是,在格林威治标准时间中,提前五个半小时,时间为2013-05-03 18:30

  • 然后您将此印度时间戳作为GMT 传递给CreateFromFormat,从而导致转变。

这里根本不需要使用strtotime:只需要

DateTime::createFromFormat('Y-m-d', $day);