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

问题描述 投票:0回答:1

用户订阅的有效期为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:572019-12-24 23:06:42

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

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

有人可以帮助我吗?

谢谢!

php datetime diff
1个回答
0
投票

$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构造函数中的第二个参数。

© www.soinside.com 2019 - 2024. All rights reserved.