【问题标题】:Laravel 5 Set timezone base on user settingsLaravel 5 根据用户设置设置时区
【发布时间】:2017-09-11 15:53:20
【问题描述】:

我有一个包含时区列的用户表。

我想根据用户设置设置所有控制器功能时区。所以当他登录时,所有的,

例如。聊天消息::where(....)->get();

created_at * edited_at 将被更改。我只想改变 GET 。不是POST

我试过 Config::set('app.timezone', Auth::user()->timezone); 还是不行,还是用 Laravel app/config.php

【问题讨论】:

  • 我感觉最好在前端进行这种转换,否则您可能会弄乱数据库中的数据
  • @apokryfos 有任何样本吗?我还是 Laravel 的新手
  • 阅读laracasts.com/discuss/channels/general-discussion/…,有一个代码示例{{ $model->created_at->setTimezone(Auth::user()->timezone)->toDateTimeString() }},在向用户显示数据时可以在.blade.php 文件中使用,而无需修改底层数据库数据(应始终使用UTC)
  • 你知道不使用 foreach 来更改所有行吗?我有这个$ProMessages = ChatMessage::with('infouser')... ->orderBy('created_at','DESC')->get();

标签: php date datetime laravel-5


【解决方案1】:

可能不是一个干净的解决方案,但这应该可以代替配置集。

date_default_timezone_set(Auth::user()->timezone);

【讨论】:

  • 这将在 POST 方法上改变。
【解决方案2】:

我已经在我的模型上添加了这个,我认为这是唯一的方法。

public function getCreatedAtAttribute($value)
{
    if(Auth::user()) {
        $date = Carbon::createFromFormat('Y-m-d H:i:s', $value);
        $date->setTimezone(Auth::user()->timezone ?: "UTC");

        return $date->toDateTimeString();
    } else {
        return $value;
    }
}

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2022-01-02
    • 2015-05-20
    相关资源
    最近更新 更多