Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP使用DateTime将日期转换为时间戳减少1天-奇怪_Php - Fatal编程技术网

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

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将时间戳解

具有以下简单的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
将时间戳解释为GMT

  • 我猜你的时区是印度(GMT+5.5)。因此,
    strotime(“2013-05-04”)
    将为您提供一个时间戳,在印度是
    2013-05-04 00:00
    。然而,在格林尼治标准时间(格林尼治标准时间早5个半小时),时间是
    2013-05-03 18:30

  • 然后,您将这个印度时间戳作为GMT传递给CreateFromFormat,从而导致转换

这里根本不需要使用strotime,只需这样做即可

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

@佩卡웃 请解释一下……将字符串date
2013-05-04
转换为DateTime对象而无需经历时区麻烦的最佳方式是什么?虽然您找到了正确的解决方案,但解释并不正确——或者可能是我太慢了。@草莓是的,正在考虑同样的事情-给我一分钟(我想OP的实际时区可能在印度,GMT+5.5)@草莓我想我现在知道了,但我离格林威治7英里,我得到了同样的结果!?!;-)