使用碳将 utc 更改为其他时区会得到相同的结果
using carbon to change utc to other timezone gives the same result
在我的数据库中,时间保存为 utc。
我正在尝试使用 carbon(不必一定是 carbon)并将其更改为其他时区,例如太平洋时区或 America/Vancouver 在将数据传递到前端时。我想保留具有 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()
不应该 $date->toDateTimeString()
是 "2019-01-16 10:21:31"
因为时间是 -08:00?
有人可以告诉我我在这里做错了什么吗?
提前致谢。
当您使用 createFromFormat 时,您正在创建一个 Carbon 对象,您可以在 documentation 中阅读 2019-01-16 18:21:31 日期时间 America/Vancouver 时区
但您真正想要做的是将 UTC 时间转换为 America/Vancouver 时间。
您应该使用 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,然后将其转换为 America/Vancouver 时间
$date->setTimezone('America/Vancouver'); // "2019-01-16 10:21:31" (America/Vancouver Time)
在我的数据库中,时间保存为 utc。
我正在尝试使用 carbon(不必一定是 carbon)并将其更改为其他时区,例如太平洋时区或 America/Vancouver 在将数据传递到前端时。我想保留具有 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()
不应该 $date->toDateTimeString()
是 "2019-01-16 10:21:31"
因为时间是 -08:00?
有人可以告诉我我在这里做错了什么吗?
提前致谢。
当您使用 createFromFormat 时,您正在创建一个 Carbon 对象,您可以在 documentation 中阅读 2019-01-16 18:21:31 日期时间 America/Vancouver 时区
但您真正想要做的是将 UTC 时间转换为 America/Vancouver 时间。
您应该使用 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,然后将其转换为 America/Vancouver 时间
$date->setTimezone('America/Vancouver'); // "2019-01-16 10:21:31" (America/Vancouver Time)