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