在我的数据库中,时间被保存为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()
$date->toDateTimeString()
不应该因为时间是 -08:00 而"2019-01-16 10:21:31"
吗?
有人可以帮我说我在这里做错了什么吗?
提前谢谢。
当您使用 createFromFormat 时,您正在创建一个碳对象,您可以在文档中阅读 2019-01-16 18:21:31 日期时间在美国/温哥华时区
但您真正想做的是将UTC时间转换为美国/温哥华时间。
您应该使用 UTC 时区创建日期时间
$tz = $tt->created_at; // "2019-01-16 18:21:31" (UTC Time)
$date = Carbon::createFromFormat('Y-m-d H:i:s', $tz, 'UTC');
因此,您的日期时间对象像数据库一样采用UTC,然后将其转换为美国/温哥华时间
$date->setTimezone('America/Vancouver'); // "2019-01-16 10:21:31" (America/Vancouver Time)