【问题标题】:Laravel + Carbon + TimezoneLaravel + Carbon + 时区
【发布时间】:2020-10-29 02:21:29
【问题描述】:

我已将config/app.php 中的时区配置为Europe/Lisbon

如果我执行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 是基于 UTC 的,因此只需执行 Carbon::now() 将以 UTC 格式输出时间。您必须指定时区才能准确反映您所在城市或地区的日期时间。 Carbon::now('PST')Carbon::now('Continent/City') 就像 (Carbon::now('America/Montreal') 一样
  • 你在return Carbon::now()dd(Carbon::now())上得到同样的结果???
  • @Kurt 似乎是新版本的一个小故障,这里有另一个同样的问题stackoverflow.com/questions/62758417/…
  • 这是一个非常奇怪的问题。希望有人可以照亮它。这里值得大赞。
  • 您可以使用 date() 函数来帮助您获得正确的时间 date_default_timezone_set('Europe/Lisbon');回显日期(“YmdHis”); php.net/manual/en/function.date.php.

标签: laravel timezone


【解决方案1】:

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

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

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

或者你可以使用setTimezone的碳法

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

【讨论】:

  • 谢谢,但没用。我正在测试美国时区跳跃以获得不同的值,但我没有。
  • 这适用于我以前的版本 5.x。但不是在 Laravel 7.x 中。我认为 Laravel 7 有一个小故障。不知道 6.x
猜你喜欢
  • 2017-09-15
  • 2016-10-09
  • 2019-09-21
  • 2015-10-01
  • 1970-01-01
  • 2017-07-16
  • 2019-01-04
  • 2019-05-04
  • 2018-09-16
相关资源
最近更新 更多