我对时间戳的时区有疑问。
如何使用app.php中的时区?我意识到,如果我使用Carbon创建时间戳或从数据库查询值(时间戳),则行为会有所不同。
注意:我的MySQL使用系统的时区是GMT + 8或Asia / Kuala_Lumpur。
>>> new Carbon\Carbon;
=> Carbon\Carbon @1572404830 {#3496
date: 2019-10-30 03:07:10.625282 UTC (+00:00),
}
>>>
>>> new Carbon\Carbon;
=> Carbon\Carbon @1572404816 {#3520
date: 2019-10-30 11:06:56.316851 Asia/Kuala_Lumpur (+08:00),
}
例如#1和#2,这是我的期望。您会根据时区获得不同的价值。当我们从数据库中查询时间戳时,事情变得有些奇怪(至少对我而言)。
>>> RefCyberCity::whereDataSource('ccms')->take(1)->first()->updated_at
=> Illuminate\Support\Carbon @1572083605 {#3531
date: 2019-10-26 09:53:25.0 UTC (+00:00),
}
>>> RefCyberCity::whereDataSource('ccms')->take(1)->first()->updated_at
[!] Aliasing 'RefCyberCity' to 'App\RefCyberCity' for this Tinker session.
=> Illuminate\Support\Carbon @1572054805 {#3491
date: 2019-10-26 09:53:25.0 Asia/Kuala_Lumpur (+08:00),
}
我们可以看到两者都输出2019-10-26 09:53:25.0,但是时区不同。
来自数据库的日期是有效字符串,尽管MySQL具有自己的时区信息,但没有时区的日期字符串不会反映该信息。
Laravel DB驱动程序假设它被编写为应用程序配置中设置的时区。如果您要更改项目的时区中间项目,则将浪费所有日期。
我对时区的个人建议是将所有内容都保留为应用程序和服务器上的UTC,然后仅根据用户的偏好在最后可能的时刻(例如,在视图中)更改时区。这还允许您输出UTC时间戳,并让JavaScript将其更新到用户的语言环境。时区非常困难,如果您所在的国家/地区有夏令时,则时区变得更加混乱,例如Europe/London
会根据年份更改时区。