php 日期时间差异完全关闭
php datetime diff completely off
所以我有这个非常简单的代码,但它拒绝工作,我不知道为什么?
$date1= new DateTime (gmdate('H:i Y-m-d'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('H:i Y-m-d') .'<br>'; returns //08:32 2018-06-08
echo $date2->format('H:i Y-m-d') .'<br><br>'; returns //04:32 2018-06-08
$diff = $date1->diff($date2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; returns //+02:00
我不是数学家,但我很确定 04:32 和 08:32 之间的区别不是 2 小时,而是 4 小时。
如果我改变它,它有时会变得更差。
$date1 = new DateTime ('now', new DateTimeZone('Indian/Comoro'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('H:i Y-m-d') .'<br>'; returns //11:44 2018-06-08
echo $date2->format('H:i Y-m-d') .'<br><br>'; returns //04:44 2018-06-08
$diff = $date1->diff($date2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; returns //+00:00
我什至都不知道。
当您请求 "now" 日期对象时,它 return 是您当前的日期。它的格式取决于您的客户端语言环境,或者您明确指定的语言环境。
但是,当您有两个日期对象时,都在 now(可能格式化为两个不同的时区),当您进行比较(或差异)时,它们应该return 与固有日期对象相同的值是自 1/1/1970 以来的刻度数。
如果你想检查,输出每个日期的"ticks" 属性,你会看到它们是一样的。
因此您的代码绝对可以正常工作。
这是更新后的代码。它returns-07:00
$date1 = new DateTime ('now', new DateTimeZone('Indian/Comoro'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('h:i Y-m-d') .'<br>';/// returns //11:44 2018-06-08
echo $date2->format('h:i Y-m-d') .'<br><br>';// returns //04:44 2018-06-08
$datetime1 = new DateTime($date1->format('h:i Y-m-d'));
$datetime2 = new DateTime( $date2->format('h:i Y-m-d'));
$diff = $datetime1->diff($datetime2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; returns //-07:00
gmdate 显示不带夏令时的时间,而在纽约目前是夏令时。
如果您改用 "Europe/London",则两端都有夏令时。
$date1= new DateTime ('now', new DateTimeZone('Europe/London'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('H:i Y-m-d') .'<br>';
echo $date2->format('H:i Y-m-d') .'<br><br>';
$diff = $date1->diff($date2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; //+00:00
所以我有这个非常简单的代码,但它拒绝工作,我不知道为什么?
$date1= new DateTime (gmdate('H:i Y-m-d'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('H:i Y-m-d') .'<br>'; returns //08:32 2018-06-08
echo $date2->format('H:i Y-m-d') .'<br><br>'; returns //04:32 2018-06-08
$diff = $date1->diff($date2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; returns //+02:00
我不是数学家,但我很确定 04:32 和 08:32 之间的区别不是 2 小时,而是 4 小时。
如果我改变它,它有时会变得更差。
$date1 = new DateTime ('now', new DateTimeZone('Indian/Comoro'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('H:i Y-m-d') .'<br>'; returns //11:44 2018-06-08
echo $date2->format('H:i Y-m-d') .'<br><br>'; returns //04:44 2018-06-08
$diff = $date1->diff($date2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; returns //+00:00
我什至都不知道。
当您请求 "now" 日期对象时,它 return 是您当前的日期。它的格式取决于您的客户端语言环境,或者您明确指定的语言环境。
但是,当您有两个日期对象时,都在 now(可能格式化为两个不同的时区),当您进行比较(或差异)时,它们应该return 与固有日期对象相同的值是自 1/1/1970 以来的刻度数。
如果你想检查,输出每个日期的"ticks" 属性,你会看到它们是一样的。
因此您的代码绝对可以正常工作。
这是更新后的代码。它returns-07:00
$date1 = new DateTime ('now', new DateTimeZone('Indian/Comoro'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('h:i Y-m-d') .'<br>';/// returns //11:44 2018-06-08
echo $date2->format('h:i Y-m-d') .'<br><br>';// returns //04:44 2018-06-08
$datetime1 = new DateTime($date1->format('h:i Y-m-d'));
$datetime2 = new DateTime( $date2->format('h:i Y-m-d'));
$diff = $datetime1->diff($datetime2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; returns //-07:00
gmdate 显示不带夏令时的时间,而在纽约目前是夏令时。
如果您改用 "Europe/London",则两端都有夏令时。
$date1= new DateTime ('now', new DateTimeZone('Europe/London'));
$date2 = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date1->format('H:i Y-m-d') .'<br>';
echo $date2->format('H:i Y-m-d') .'<br><br>';
$diff = $date1->diff($date2);
$diffTime = $diff->format('%R%H:%I');
echo $diffTime; //+00:00