gpt4 book ai didi

php - 使用 Carbon 将 utc 更改为其他时区会得到相同的结果

转载 作者:行者123 更新时间:2023-12-02 07:37:29 25 4
gpt4 key购买 nike

在我的数据库中,时间保存为 utc。

我正在尝试使用碳(不一定是碳)并将数据传递到前端时将其更改为其他时区,例如太平洋时区或美国/温哥华。我希望数据库保持 utc,这样将来会更灵活。

但不知何故,当我使用碳时,我得到了相同的结果

$tz = $tt->created_at;  // "2019-01-16 18:21:31"
$date = Carbon::createFromFormat('Y-m-d H:i:s', $tz, 'America/Vancouver');
dd($tz, $date);

$date 给我结果

Carbon @1547691691 {#212
date: 2019-01-16 18:21:31.0 America/Vancouver (-08:00)
}

当我这样做时 dd($tz, $date->toDateTimeString());

我明白

"2019-01-16 18:21:31"  // $tz
"2019-01-16 18:21:31" // $date->toDateTimeString()

因为时间是 -08:00,所以 $date->toDateTimeString() 不应该是 "2019-01-16 10:21:31" 吗?

有人可以帮助我解决我在这里做错的事情吗?

提前致谢。

最佳答案

当您使用 createFromFormat 时,您正在创建一个 Carbon 对象,正如您可以在 documentation 中读到的那样。 2019-01-16 18:21:31 DateTime 位于美国/温哥华时区

但您真正想要做的是将 UTC 时间转换为美国/温哥华时间。

您应该使用 UTC 时区创建 DateTime

$tz = $tt->created_at;  // "2019-01-16 18:21:31" (UTC Time)
$date = Carbon::createFromFormat('Y-m-d H:i:s', $tz, 'UTC');

因此,您的 DateTime 对象与数据库一样采用 UTC 格式,然后将其转换为美国/温哥华时间

$date->setTimezone('America/Vancouver'); // "2019-01-16 10:21:31" (America/Vancouver Time)

关于php - 使用 Carbon 将 utc 更改为其他时区会得到相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54224519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com