【问题标题】:Date comparison not taking timezone into account日期比较不考虑时区
【发布时间】:2019-12-06 18:59:17
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: laravel date timezone php-carbon


    【解决方案1】:

    运行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)
    

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 2014-06-30
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多