【问题标题】:Use the timezone set by the user使用用户设置的时区
【发布时间】:2016-04-20 06:19:02
【问题描述】:

基本上,当我在表中获取日期时间列时,我想根据用户时区调整其日期和时间。

我有这段代码,但它似乎不起作用,即使我已经更改了时区,时间也不会改变:

public function getCreatedAtAttribute($datetime) {
    $timezone = \Auth::user()->timezone;

    $datetime = $this->asDateTime($value);

    return $datetime->timezone($timezone);
}

请帮忙。

【问题讨论】:

    标签: php timezone laravel-5.1 mutators


    【解决方案1】:

    使用date_default_timezone_set() 设置用户时区。

    public function getCreatedAtAttribute($datetime) {
        $timezone = \Auth::user()->timezone;
    
        //Call date_default_timezone_set function to set user timezone or whenever it appropieate
        date_default_timezone_set($timezone); 
    
        $datetime = $this->asDateTime($value);
    
        return $datetime->timezone($timezone);
    }
    

    更新:

    也可以使用 Config::set('app.timezone', $timezone) 来更改 laravel 配置时区。

    【讨论】:

    • 我已经有了这些设置。我的原始日期也是:2016-04-20 03:12:47,当我使用时区功能转储结果时,它仍然给了我相同的日期。以下是结果 [created_at] => Carbon\Carbon Object ([date] => 2016-04-20 03:12:47.000000 [timezone_type] => 3 [timezone] => Africa/Accra)
    【解决方案2】:

    您可以使用 Laravel 内部的 Carbon 库即时将其转换为用户指定的时区 - 您无需添加或安装任何软件包。 像这样:

    public function getCreatedAtAttribute($datetime) {
        return $datetime->timezone(\Auth::user()->timezone)->format('Y-m-d H:i:s');
    }
    

    来自:http://laraveldaily.com/timezone-settings-for-created_at-and-similar-fields/?utm_source=tuicool&utm_medium=referral

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2011-05-15
      • 2017-06-23
      相关资源
      最近更新 更多