当我在装有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号却可以?
答案 0 :(得分:3)
因为夏令时从25日开始。
4小时-GMT-1 1小时= 10800秒/ 60 = 180
要解决此问题,请始终使用UTC:
date_default_timezone_set('UTC');