繁体   English   中英

两个日期之间的时差显示少一小时

[英]Time difference between two dates showing one hour less

用户订阅的有效期为24 小时 我想以小时和分钟显示剩余时间。

$today = new DateTime("now", new DateTimeZone('Europe/Brussels'));
$date_created = new DateTime($arr["ins_date_created"]); // 2019-12-24 23:06:42
$diff = $date_created->diff($today); 

echo ($diff->format("%hu %i' valid"));
echo '<br>'.$today->format('Y-m-d H:i:s') .'<br>'. $date_created->format('Y-m-d H:i:s').'<br>'; 

输出是:
2u 3' 有效
2019-12-25 02:09:57
2019-12-24 23:06:42

第一个问题是他少给了一个小时 => 它必须是3u 3' 有效

第二个问题是我想显示:仍然 20u 57' 有效

谁能帮助我?

谢谢!

$today是布鲁塞尔当地时间,而$date_created是当前配置的 PHP 当地时间。 由于第二个值不是绝对时间,您会得到不同的结果,无论何时更改,它们都是正确的:

$a = '2019-12-25 02:09:57';
$b = '2019-12-24 23:06:42';

date_default_timezone_set('Europe/Brussels');
$today = new DateTime($a, new DateTimeZone('Europe/Brussels'));
$date_created = new DateTime($b);
var_dump($date_created->diff($today)->format("%hu %i' valid"));

date_default_timezone_set('Europe/London');
$today = new DateTime($a, new DateTimeZone('Europe/Brussels'));
$date_created = new DateTime($b);
var_dump($date_created->diff($today)->format("%hu %i' valid"));

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime($a, new DateTimeZone('Europe/Brussels'));
$date_created = new DateTime($b);
var_dump($date_created->diff($today)->format("%hu %i' valid"));
string(11) "3u 3' valid"
string(11) "2u 3' valid"
string(12) "11u 3' valid"

如果您期望3u 3这意味着两个日期都在布鲁塞尔时间,所以不要忘记告诉 PHP。 如果您真的不需要混合时区,我建议您在应用程序(或至少会话)级别配置它,以便您可以省略DateTime构造函数中的第二个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM