【问题标题】:Carbon isn't giving the correct datetime with setTimezoneCarbon 没有使用 setTimezone 给出正确的日期时间
【发布时间】:2021-04-05 12:02:40
【问题描述】:

我在我的 Laravel API 项目中使用 Carbon,当我尝试设置时区并在用户的时区中获取日期时间时,我出于某种原因获取了 UTC 值,我做错了什么?

// $user->timezone will give me "America/Curacao" or whatever their time zone is
$curr = Carbon::now()->setTimezone($user->timezone)

但是当我回显 $curr 的内容时,我得到的 UTC 时间为:

2021-04-05T11:58:35.186750Z

我错过了什么?

【问题讨论】:

  • 如果您使用 Laravel 7 或更高版本,那么您的 api 将提供基于 UTC 的时间
  • 当我用setTimezone 明确设置我的时区时,为什么会这样做?
  • 你和Carbon::now(new \DateTimeZone($user->timezone);有同样的结果吗?

标签: laravel datetime php-carbon


【解决方案1】:

您会得到 ISO-8601 字符串,它是 JSON 中日期的标准格式。但该对象正确地位于America/Curacao 时区。如果您想将其传递给浏览器中的Date 对象,则不需要时区,只需按原样传递此字符串即可。

如果您想格式化用户看到的日期,那么只需在设置时区后选择格式:

$curr = Carbon::now()->setTimezone($user->timezone)->format('Y-m-d H:i:s')

或任何适合您的格式。

并且您应该在您的应用设置中保留'timezone' => 'UTC',因为您的用户可能有任何不同的时区,而使用 UTC 来保存他们的后端更不可知。

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多