Carbon 没有通过设置时区给出正确的日期时间



我在我的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-05T1:58:35.186750Z

我缺少什么?

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

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

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

或者任何与您相关的格式。

你应该在你的应用程序设置中保留'timezone' => 'UTC',因为你的用户可能有任何不同的时区,而UTC更不可知,可以用来保存它们的后端。

最新更新