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

时间:2019-12-25 01:19:16

标签: php datetime diff

用户订阅的有效期为 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'有效

有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分: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构造函数中省略第二个参数。