我在GMT中有一台服务器,但我想更新这些字段(* created_at *和* updated_at *)以保存PST中的时间戳。
我已经做了一些尝试来完成这项测试,但没有一个是正确的。
但是,任何此更新都会将时区更新应用于Laravel Eloquent时间戳。这个字段created_at和updated_at由Eloquent处理。
我还使用 sudo dpkg-reconfigure tzdata 更新了Ubuntu服务器时区,但此更新根本不起作用。
编辑:我需要让Laravel Eloquent时间戳在PST时区上工作,以便将期货插入数据库。
任何帮助都会有用。感谢。
答案 0 :(得分:14)
我知道这个问题有点陈旧,但在尝试提出相同的解决方案时我偶然发现了它,并希望分享我如何解决它。
我的建议是不要更改存储消息的时区。将它们作为UTC存储在数据库中。将存储设置保持为一个恒定的参照系,然后将其转换为您需要的任何时区,从长远来看,这将为您节省大量的麻烦。
作为其中一个令人头疼的例子,想象两个人试图在不同的时区协调会议时间,其中一个观察DST而一个人没有,你需要在每个用户的本地显示时间时间。将存储的PDT时间转换为美国/开曼(没有观察到DST)会有多难?当PST与PDT存储时间时,您会如何考虑?你怎么知道的? (提示:为了回答这一个问题,可能没有数百行额外代码,你赢了)。
要在正确的时区内抽出时间,只需在模型上添加一个mutator函数:
use Carbon\Carbon;
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。
答案 1 :(得分:4)
这很简单,只需修改AppServiceProvider.php中的函数boot()
即可def Button(msg, x, y, w, h, ic, ac, action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.rect(window, ac, (x, y, w, h))
#if event.type == pygame.MOUSEBUTTONDOWN:
if click[0] == 1 and action != None:
pygame.draw.rect(window, lightgrey, (x, y, w, h))
if action == "undo":
print("hey")
if action == "reset":
for row in range(6):
for column in range(7):
board[row][column] = 0
elif action == "quit":
pygame.quit()
quit()
else:
pygame.draw.rect(window, ic, (x, y, w, h))
答案 2 :(得分:1)
如果您想更改服务器的设置以便将来输入数据库,或者您想要更新数据库中的当前值,我并不完全确定。
如果是后者,更改服务器设置将不会影响数据库中的当前记录。如果要更改现有字段的值,可以使用MySQL命令执行此操作,如:
update `table` set created_at = (SELECT created_at) + INTERVAL 2 HOUR;
其中table
是数据库表的名称,2
是以小时为单位的偏移量。
答案 3 :(得分:0)
对于Lumen,它可以在.env文件中使用:
DB_TIMEZONE =“ + 03:00”