如何在不触及框架主时区的情况下更改模型中的时区?

时间:2018-03-28 03:06:20

标签: laravel eloquent laravel-eloquent laravel-5.6

如何在created_at模型的User字段上更改时区?例如,现在应用时区为UTC,我必须在将数据保存到数据库之前将时区created_at字段更改为Europe/Paris并将updated_at字段时区更改为Europe/London。我有示例代码来更改字段时区。但我不知道在模特身上使用它的地方。我的示例代码更改时区:

$this->created_at->timezone('Europe/London')->format('d:H:i');
$this->updated_at->timezone('Europe/Paris')->format('H:i');

3 个答案:

答案 0 :(得分:0)

您可以在.env文件中为所有应用更改时区,您可以像这样更改时区

// .env文件

'timezone' => env('APP_TIMEZONE', 'UTC')

您必须根据需要使用自定义时区更改UTC

您也可以在app.php文件夹中更改时区

'timezone'=> 'UTC'

如果你想改变格式时间,你可以在模型中轻松设置这个受保护的属性

protected $dateFormat

例如

protected $dateFormat = 'U';

您可以在此地址中设置时区

https://php.net/manual/en/timezones.php

答案 1 :(得分:0)

您也可以在模型中创建方法,例如。像这样的本地范围

public function scopeChangeTimezone($query)
{
    return Carbon\Carbon::parse($value, 'America/New_York')-> 
      timezone($this->deployment->timezone);
} 

并记住导入Carbon并将America / New_York更改为您的自定义时区

$data = App\User::->ChangeTimezone()->orderBy('created_at')->get();

您必须使用范围前缀创建方法,然后使用不带范围前缀

如果你想从模型中获取数据或在你可以做的任何地方使用它

检查一下,如果这种方式不起作用,请打电话给我,然后我尝试

答案 2 :(得分:0)

使用 accessors

namespace App\Models;

// ...
use Carbon\Carbon;

// ....
public function getCreatedAtAttribute(){
    return Carbon::parse($this->attributes['created_at'])->setTimezone("TimeZone identifier" );
}

public function getUpdatedAtAttribute(){
    return Carbon::parse($this->attributes['updated_at'])->setTimezone("TimeZone identifier" );
}