【问题标题】:How to set local timezone in laravel如何在 laravel 中设置本地时区
【发布时间】:2015-10-07 03:02:59
【问题描述】:

有没有办法在 laravel 中设置本地时区?

config/app.php

'timezone' => 'UTC',
  • 应该添加什么以使上面的时区值使用本地时区?

经过一番研究,偶然发现了以下PHP的处理方式:

$userTimezone = Auth::user()->timezone;

date_default_timezone_set($userTimezone);

// and change the configuration so they match

Config::set('app.timezone', $userTimezone)

但是,除了使用上面的代码转换时区之外,还有其他优雅的解决方案吗?

干杯

【问题讨论】:

    标签: php laravel laravel-4 timezone laravel-5


    【解决方案1】:

    不要那样做。永远不要将全球 Laravel 时区设置为用户的时区。你会面临无穷无尽的问题。

    选择您的应用程序时区,将 Laravel 配置设置为该时区,并且永远不要更改它。

    相反,当您需要在用户的时区显示日期时,请执行以下操作

    User::find(1)->foobazed_at->timezone(Auth::user()->timezone);
    

    要控制哪些模型列自动转换为Carbon\Carbon 实例,请将以下方法添加到您的模型文件中:

    public function getDates()
    {
        return array('foobazed_at', static::CREATED_AT, static::UPDATED_AT, static::DELETED_AT);
    }
    

    【讨论】:

    • 有意义...您的建议是保留时区 UTC 本身并在仅显示时更改它。 ?在美化日期格式时说"a few min ago",这会不会说"10 min from now"。我们正在处理 db 中的 created_at/updated_at 默认值。
    • 是的,保持应用时区固定。在展示时进行转换,而不是在存储时进行。 UTC 是一个很好的选择,因为它是通用的并且没有夏令时。要显示人类友好的相对日期,您可以使用 ->foobazed_at->timezone($timezone)->diffForHumans()
    • 当您需要对数据库中的日期进行一些查询时怎么办?例如,你存储了 UTC 日期,但现在用户来自纽约,你想看看他今天在数据库中是否已经有一些条目?
    • 然后您需要将日期转换为所需的时区。您可以在使用 Carbon(包含在 Laravel 中)进行查询之前使用 DB 函数(例如 Mysql 的 CONVERT_TZ 函数)进行查询
    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2014-07-29
    • 2014-05-11
    • 2015-09-12
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多