Laravel Carbon 如何在不更改小时的情况下更改时区

新手上路,请多包涵

我正在尝试找到一种解决方法,以解决如何将存储在数据库中的日期时间转换为“yyyy-mm-dd HH-mm-ss”并为其指定时区“America/Los_Angeles”。

如果我更改时区,Carbon 会自动从时间中减去 7 小时,这就是将时间从 UTC 更改为 PST 时发生的情况,但我的数据库中的时间设置为 PST 时间。例如,我希望时间是今天上午 10 点,但如果我更改时区,Carbon 会将其转换为今天凌晨 3 点。

如何将时区更改为 PST 但仍将时间保持在上午 10 点?我需要 API 调用的时区,这就是为什么我需要弄清楚这一点。

原文由 Eric Brown 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

好的,我想出了一种愚蠢但实用的方法来做我想做的事情,并且它有效。

这是我的代码:

       $dt = Carbon::parse($request->ShootDateTime)->timezone('America/Los_Angeles');
      $toDay = $dt->format('d');
      $toMonth = $dt->format('m');
      $toYear = $dt->format('Y');
      $dateUTC = Carbon::createFromDate($toYear, $toMonth, $toDay, 'UTC');
      $datePST = Carbon::createFromDate($toYear, $toMonth, $toDay, 'America/Los_Angeles');
      $difference = $dateUTC->diffInHours($datePST);
      $date = $dt->addHours($difference);

我得到了我想转换为时区并解析它并更改时区的时间。然后我得到日、月和年,并创建 2 个不同的日期,两者都会及时读取为 00:00:00,但因为在这种情况下它们相隔 7 小时,所以它们只能是 00:00:如果它们相差 7 小时,则为 00,这就是我接下来要捕捉的内容。最后,我采用初始日期时间并将差异添加到其中,从而在适当的时区为我提供适当的时间。

这很丑陋,但它有效。

原文由 Eric Brown 发布,翻译遵循 CC BY-SA 3.0 许可协议

我对这个问题的回答会有所不同。对于我的情况,我有一个需要解析的日期字符串,就好像它是 自定义时区 中给定日期的第 0 小时(午夜) - 但我数据库中的所有日期都 以 UTC 进行跟踪,所以我真正需要的是要做的是将日期保持在 UTC 时区,但给它一种预期时区的“反向偏移”。

情况:我得到一个日期字符串“2020-09-02”,我将使用它来查看 X 记录是否有一个在同一日期或之后的字段;但是,我在美国/芝加哥时区,目前距离 UTC 为 -05:00,因此我需要将此日期字符串的 UTC 版本调整为 2020-09-02 05:00 以准确计算我时区的午夜.

为此,我需要将日期字符串解析为美国/芝加哥时区,然后将时区更改为 UTC:

 $value = "2020-09-02"
Carbon::parse($value . '  America/Chicago')->tz('UTC')

原文由 Aaron Krauss 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题