laravel - Laravel + Carbon + 时区
问题描述
我已将时区配置config/app.php
为Europe/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.', []);
}
解决方案
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');
推荐阅读
- reactjs - Internet Explorer 11 上的 SCRIPT5017 错误,使用 webpack 4、babel 7 并做出反应
- javascript - 有没有办法优化这个 Promise 循环,这样我就不会出现 FATAL JavaScript heap out of memory 错误了?
- python - 试图从另一个函数中捕获异常
- java - 如何更改单击的按钮的颜色,但使其只能同时更改一个按钮的颜色?
- django - 以 HTML 格式发送电子邮件不显示上下文
- graphics - 如何计算图形和方程中带有 x 的值的值?
- python - 如何使用 PyGame 制作“退出”按钮单击事件以关闭程序
- javascript - (猫鼬)如何在帖子和评论模型之间进行双向引用
- sql - 将员工登录数据与用户登录数据混合在一起,还是有两个不同的表?
- unity3d - Unity 3D:如何只面对卡一半