日期在不同版本的PHP中返回不同的结果

我有一个日期A和B.

我想得到他们之间的小时/分钟.喜欢:

date('h:i', strtotime(B) - strtotime(A));

但我得到了奇怪的结果:

echo date('h:i', strtotime('2014-01-01') - strtotime('2014-01-01'));
// echoes: 01:00 (!)


date_default_timezone_set('Europe/London');
$date = new DateTime();
$A = $date->format('Y-m-d H:i:s'); echo '<br />';
$date->modify("+64 minutes");
$B = $date->format('Y-m-d H:i:s'); echo '<br />';
echo date('h:i', strtotime($B) - strtotime($A));
// echoes 02:04 (!)

Live example为上一个代码:

为什么这样以及如何获得预期的结果?

最佳答案 这是正确的行为

为什么?想一想:strtotime(‘2014-01-01’) – strtotime(‘2014-01-01’)为零 – 但是date()期望时间戳作为第二个参数.这意味着,您正试图从零点时间戳获取日期.在不同的时区,这一点是不同的.你的伦敦TZ有01偏移,这就是为什么0点时间戳是01 Jan 1970 01:00:00 – 这就是为什么date(‘h:i’,0)是01:00

尝试设置,例如,莫斯科区域:

date_default_timezone_set('Europe/Moscow');
$date = new DateTime();
$A = $date->format('Y-m-d H:i:s'); 
$date->modify("+64 minutes");
$B = $date->format('Y-m-d H:i:s'); 

echo date('h:i', strtotime($B) - strtotime($A));//04:04

– 你会看到04:04 – 因为莫斯科的当前偏移是03(所以03小时64分钟修改)

点赞