用户订阅的有效期为 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'有效
有人可以帮助我吗?
谢谢!
答案 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
构造函数中省略第二个参数。