首页 > 解决方案 > Laravel + Carbon + 时区

问题描述

我已将时区配置config/app.phpEurope/Lisbon.

如果我做 a return date_default_timezone_get();,它会Europe/Lisbon像我想要的那样返回。

到目前为止,一切都很好!

当我这样做Carbon::now()时,它会返回例如 16 小时,而当前时间是 17 小时。有人可以解释为什么不考虑夏令时吗?

我正在使用 Laravel 7.16、PHP 7.4

问候

编辑1:代码图像+时代| https://imgur.com/pfh6uij

编辑 2:php artisan optimize:clear当我更改配置中的某些内容时,总是清除所有缓存。

编辑 3:模型上的 created_at 和 updated_at 时间正确。

编辑 4:return Carbon::now()返回糟糕的时间。执行dd(Carbon::now())返回正确的值,并在config/app.php|中配置时区。dd() 示例 ->date: 2020-07-08 17:25:28.935949 Europe/Lisbon (+01:00)

编辑 5:在 github 上打开了一个问题 - https://github.com/laravel/framework/issues/33475

编辑 6:就我而言,我使用 php date() 函数来解决该问题。不是我想要的方式,而是完成工作......

if (date(now()) > $subscriber->token_expire_date)
{
    // return not found response
    return $this->response(false, 410, 'The token has expired.', []);
}

标签: laraveltimezone

解决方案


Carbon 使用默认的DateTime PHP 对象,所以使用date_default_timezone_set()函数,例如: date_default_timezone_set('Europe/Lisbon');

或者你定义它AppServiceProvider App/Providers/AppServiceProvider.php

public function boot()
{
    date_default_timezone_set('Europe/Lisbon');
}

或者你可以使用setTimezone碳法

echo Carbon::now()->setTimezone('Europe/Lisbon')->format('H:i');

推荐阅读