【问题标题】:Comparing dates with timezone getting wrong evaluation将日期与时区进行比较得到错误的评估
【发布时间】:2023-03-10 03:11:01
【问题描述】:

我有一项服务,用户可以在其中创建活动并参与所述活动。在活动创建时,用户可以指定开始、结束日期和时间,然后填写活动将要发生的时区。完成后,他们可以邀请其他用户参与活动。

当成员访问活动页面时,一段后端逻辑会根据活动的开始时间检查当前时间。如果当前时间(用户/用户的时区)在活动的开始和结束时间之内,则用户将能够参加活动(允许他们访问可以进行视频会议的走廊页面)。

我的问题是比较不同时区的日期。我使用默认的 UTC 时区保存所有日期。开始日期的示例

 date: 2019-07-27 11:00:00.0 UTC (+00:00)

然后将 $now 与它进行比较。 $now 是下面的例子

date: 2019-07-27 18:11:18.747797 Asia/Beirut (+03:00)

$now 是这样分配的

$now = Carbon::now()->tz($userProfile->timezone->key);

但是当我进行诸如

之类的比较时
$now->lte($event->ends_at)

我得到了一个错误的评估,即使 $now 晚于 $event->ends_at 它仍然评估为 true。是否需要评估具有不同时区的日期?

【问题讨论】:

    标签: php laravel date timezone php-carbon


    【解决方案1】:

    lte()rely on

    $now->copy()->tz('UTC')->lte($event->ends_at->copy()->tz('UTC'))
    

    如果您使用的是CarbonImmutable(推荐),则不需要->copy() 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2014-05-03
      • 2017-06-28
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多