php – 如何更新Laravel Eloquent管理的时间戳(created_at和upda
我在GMT中有一台服务器,但我想更新这些字段(* created_at *和* updated_at *)以保存PST中的时间戳.
我已经做了一些尝试来完成这项测试,但没有一个是正确的. >我将config / application.php更新为’timezone’=> “美国/洛杉矶” 但是,任何此更新都会将时区更新应用于Laravel Eloquent时间戳.这个字段created_at和updated_at由Eloquent处理. 我还使用sudo dpkg-reconfigure tzdata更新了Ubuntu服务器时区,但此更新根本不起作用. 编辑:我需要将Laravel Eloquent时间戳用于PST时区,以便将期货插入数据库. 任何帮助都会有用.谢谢.
我知道这个问题有点陈旧,但我在尝试提出相同的解决方案时偶然发现了它,并希望分享我如何解决它.
我的建议是不要更改存储消息的时区.将它们作为UTC存储在数据库中.将存储设置保持为一个恒定的参照系,然后将其转换为您需要显示的任何时区,从长远来看将为您节省大量的麻烦. 作为其中一个令人头疼的例子,想象两个人试图在不同的时区协调会议时间,其中一个人观察DST而一个人没有,你需要在每个用户的当地时间显示时间.将存储的PDT时间转换成美国/开曼(不遵守DST)会有多难?当PST与PDT存储时间时,您会如何考虑?你怎么知道的? (提示:为了回答这一个问题,可能没有数百行额外的代码,你不会). 要在正确的时区中获得时间,只需在模型本身上添加一个mutator函数: use CarbonCarbon; class MyModel extends Eloquent { // {{{ getCreatedAtAttribute() public function getCreatedAtAttribute($value) { return Carbon::createFromTimestamp(strtotime($value)) ->timezone('America/Los_Angeles') ->toDateTimeString() ; } // }}} } 现在,每当你执行$myModel-> created_at时,它将神奇地转换为正确的时区,但你仍然将UTC保留在你的数据库中,这肯定会超过其他时区的特权以进行持久存储. 想让用户设置自己的时区吗?将功能更改为: public function getCreatedAtAttribute($value) { $user = Auth::user(); // If no user is logged in,we'll just default to the // application's timezone $timezone = $user ? $user->timezone : Config::get('app.timezone'); return Carbon::createFromTimestamp(strtotime($value)) ->timezone($timezone) // Leave this part off if you want to keep the property as // a Carbon object rather than always just returning a string ->toDateTimeString() ; } 而且,改变时区的所有复杂性,将日常储蓄考虑在内都会被抽象出来,你可以忘记它甚至必须发生. 有关Laravel mutators / accessors的更多信息,请查看documentation. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |