有没有一种简单的方法可以仅在laravel视图上更改时区?

时间:2020-05-15 09:00:56

标签: php laravel laravel-blade

因此,我已经使用UTC将任何日期保存在数据库中,并且可以像$ data-> created_at或$ data-> blocked_at一样获取它。因此,在我的配置中,我将时区设置为UTC,然后我希望在查看时将其从UTC转换为UTC + 7或其他时区。

是否有一种简便的方法可以在查看所有日期时转换我想要的时区?

我仍在使用Laravel 5.8

编辑:

我使用的是答案,但可以在我的基本模型上实现,就像这样:

width:20%

然后我将把列名称为$ data-> getDateConverter(“ created_at”);

3 个答案:

答案 0 :(得分:2)

您可以使用包含在核心中的Carbon

$timestamp = '2014-02-06 16:34:00';
$date = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp, 'Europe/Stockholm');
$date->setTimezone('UTC');

欧洲/斯德哥尔摩是您的默认时区,而UTC是您要设置的时间

如果要在显示时将其从模型转换,请尝试访问器

public function getCreatedAtAttribute($value)
    {
        $date = Carbon::createFromFormat('Y-m-d H:i:s', $value, 'Europe/Stockholm');
        $date->setTimezone('UTC');
        return $date->toDateTimeString();
    }

答案 1 :(得分:0)

如果在插入时间时想更改时区,那么

使用'timezone' => 'Asia/Kolkata'。在您的config / app.php

通过此操作,您可以设置应用程序的默认时区。

答案 2 :(得分:0)

您可以使用将此功能添加到您的模型中

 public function setViewDateFormat( $date ) {
        return Carbon::parse( $date ,'Africa/Cairo')->format( 'j F Y' );
 }

然后在任何日期属性上调用它

public function getFormattedCreatedAtAttribute() {
        return ( $this->created_at ) ? $this->setViewDateFormat( $this->created_at ) : null;
}

这样您就可以设置所有日期时区和格式。