我正在尝试将事件资源的开始日期与now
日期进行比较。所有日期都存储为UTC,然后根据用户的时区设置时区。
但是当我比较日期时,无论我设置的时区如何,差异始终是相同的。它始终被评估为UTC。例如,当我设置
$now = Carbon::now()->tz($profileTimezone);
然后尝试将其与另一个日期进行比较
$difference = $now->diffInHours($event->starts_at));
无论我为now
设置的时区如何,它总是返回具有相同值的相同差异对象。例如,hours
在不同时区时,now
的差异是否应该改变?
答案 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)