不考虑时区的日期比较
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)
我正在尝试将我拥有的事件资源的开始日期与 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)