PHP奇怪的日期时间差180分钟而不是240分钟

时间:2018-07-14 03:44:26

标签: php datetime timestamp

当我在装有php 7.1.18的Windows 10 WSL上运行此代码时:

$start = new DateTime("2018-03-24 00:00:00");
$end = new DateTime("2018-03-24 04:00:00");
$minutes = ($end->getTimestamp() - $start->getTimestamp()) / 60;
echo $start->format("Y-m-d H:i:s")." - ".$end->format("Y-m-d H:i:d")." minutes: ".$minutes."\n";

$start = new DateTime("2018-03-25 00:00:00");
$end = new DateTime("2018-03-25 04:00:00");
$minutes = ($end->getTimestamp() - $start->getTimestamp()) / 60;
echo $start->format("Y-m-d H:i:s")." - ".$end->format("Y-m-d H:i:d")." minutes: ".$minutes."\n";

我得到以下结果:

2018-03-24 00:00:00 - 2018-03-24 04:00:24 minutes: 240
2018-03-25 00:00:00 - 2018-03-25 04:00:25 minutes: 180

底线也应该是240分钟?

如果在生产服务器上运行它,我将得到相同的结果。如果我在http://sandbox.onlinephpfunctions.com/之类的一些在线代码测试器上运行它,则两次都将正确返回240。

一定是一些奇怪的本地化错误还是什么?为什么24号可以,但25号却可以?

1 个答案:

答案 0 :(得分:3)

因为夏令时从25日开始。

4小时-GMT-1 1小时= 10800秒/ 60 = 180

要解决此问题,请始终使用UTC:

date_default_timezone_set('UTC');