我有一个日期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分钟修改)