不考虑时区的日期比较

Date comparison not taking timezone into account

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

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

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

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

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

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

当运行 tz 方法时,它会将日期时间对象转换为该时区。这意味着如果您现在更改为比当前时区晚 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)