PHP使用DateTime将日期转换为时间戳减少1天-奇怪
具有以下简单的PHP代码:PHP使用DateTime将日期转换为时间戳减少1天-奇怪,php,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\u date应该是5月4日,对吗?这是一个时区问题 strotime将为您提供时区敏感时间戳,而带有U参数的createFromFormat将时间戳解
$day = '2013-05-04';
$disp_day = DateTime::createFromFormat('U', strtotime($day));
echo $day . " " . $disp_day->format('F j');
它输出
2013-05-04 May 3
但是$disp\u date
应该是5月4日,对吗?这是一个时区问题
strotime
将为您提供时区敏感时间戳,而带有U
参数的createFromFormat
将时间戳解释为GMT
- 我猜你的时区是印度(GMT+5.5)。因此,
将为您提供一个时间戳,在印度是strotime(“2013-05-04”)
。然而,在格林尼治标准时间(格林尼治标准时间早5个半小时),时间是2013-05-04 00:00
2013-05-03 18:30
- 然后,您将这个印度时间戳作为GMT传递给CreateFromFormat,从而导致转换
DateTime::createFromFormat('Y-m-d', $day);
@佩卡웃 请解释一下……将字符串date
2013-05-04
转换为DateTime对象而无需经历时区麻烦的最佳方式是什么?虽然您找到了正确的解决方案,但解释并不正确——或者可能是我太慢了。@草莓是的,正在考虑同样的事情-给我一分钟(我想OP的实际时区可能在印度,GMT+5.5)@草莓我想我现在知道了,但我离格林威治7英里,我得到了同样的结果!?!;-)