日期比较未考虑时区

时间:2019-07-29 12:21:49

标签: laravel date timezone php-carbon

我正在尝试将事件资源的开始日期与now日期进行比较。所有日期都存储为UTC,然后根据用户的时区设置时区。

但是当我比较日期时,无论我设置的时区如何,差异始终是相同的。它始终被评估为UTC。例如,当我设置

$now = Carbon::now()->tz($profileTimezone);

然后尝试将其与另一个日期进行比较

$difference = $now->diffInHours($event->starts_at));

无论我为now设置的时区如何,它总是返回具有相同值的相同差异对象。例如,hours在不同时区时,now的差异是否应该改变?

1 个答案:

答案 0 :(得分:1)

运行tz方法时,它将把datetime对象转换为该时区。这意味着如果您现在更改为比当前时区晚1小时的时区,则会从时间中减去该小时。

您正在寻找的方法是shiftTimezone,该方法将更改时区而不更改时间。

Carbon::now();
// 2019-07-29 12:53:29.575769 UTC (+00:00)

Carbon::now()->shiftTimezone('Asia/Phnom_Penh');
// 2019-07-29 12:53:29.572207 Asia/Phnom_Penh (+07:00)

Carbon::now()->tz('Asia/Phnom_Penh');
// 2019-07-29 19:53:29.575776 Asia/Phnom_Penh (+07:00)