我正在使用Postgres 13和Laravel 8.4.4
为定义为cast to datetime的Eloquent模型属性设置Unix时间戳1607207809,我们得到了正确的碳排放时间2020-12-05 22:36:49.0 +00:00。
但是,保存此模型实例将导致保存2020-12-05 22:36:49-08。这不是正确的时区,导致时间不正确。
在config/app.php中,时区设置为协调世界时。我的计算机的时区是太平洋时间,因此似乎以某种方式优先。你知道为什么吗?
我本以为时间戳是用碳编码的时区保存的,但显然不是这样的。
发布于 2020-12-10 15:30:06
我找到的最好的解决方案是在转换为datetime时在模型上定义$dateFormat = 'Y-m-d H:i:s P'。
不应使用自定义转换类(https://laravel.com/docs/8.x/eloquent-mutators#custom-casts),因为在创建新对象时,尚未设置created_at和updated_at属性。
在没有定义$dateFormat的情况下,传递给created_at和updated_at的Cast类设置器的$value参数的格式为'Y-m-d H:i:s‘。
如果您的数据库服务器设置为与您的应用程序相同的时区,这不是问题,但会发生错误。
发布于 2020-12-10 15:40:24
您可以通过使用date_default_timezone_set函数设置时区来设置整个应用程序所使用的时区。
在AppServiceProvier中添加以下代码
public function boot(){
date_default_timezone_set('Pacific/xxxxxx');
}请在此处检查您的时区名称Pacific Zone。
https://stackoverflow.com/questions/65168887
复制相似问题