碳现在时间错了

Carbon now time wrong

我刚开始使用 Carbon 扩展(到目前为止看起来还不错),但对 Carbon::now() 功能感到困惑。根据文档,似乎此功能应该反映用户当前时区的当前时间,但是,我得到的时间似乎比格林威治标准时间早一个小时。

Carbon::now() 当我在太平洋标准时间时说 2015-01-01 17:26:46,实际上现在是 2015-01-01 08:26:46

我是否必须为所有实例检测并设置用户本地时区?

什么给了? (我很可能对网站如何获取用户当地时间存在根本性的误解)

这似乎是因为您的服务器的时区与您自己的不同。

这可能是由于:

  • 服务器配置错误
  • 服务器的物理位置在不同的时区
  • 您的提供商的政策也可能导致这种情况。如果您的提供商决定他们希望在他们在世界各地拥有的每台服务器上的同一时区上运行,这将导致问题。

服务器的时区似乎是 CET(欧洲中部时间),如您所述,即格林威治标准时间 +1。

要解决此问题,您应该 change the timezone in your php.ini file(说明来自 link):

  1. 打开您的 php.ini 文件
  2. 将以下代码行添加到 php.ini 文件的顶部:

date.timezone = "US/Central"

或者,如果您希望 PHP 使用另一个时区,您应该将 US/Central 时区替换为所需的时区 as outlined here

Carbon 基于 UTC,因此只需执行 Carbon::now() 即可输出 UTC 格式的时间

您必须指定时区才能准确反映您所在城市或地区的日期时间。

有两种方法可以做到这一点。你可以这样做:

Carbon::now('PST')Carbon::now('Continent/City') 例如 (Carbon::now('America/Montreal')

更改您在 config/app 的时区。php

 'timezone' => 'YOUR TIME ZONE',

对于其他想知道为什么(有时)Carbon::now() 结果与 new DateTime() 不同的人:

运行以下...

public function time()
{
    $date = Carbon::now();
    echo $date;
    echo "<BR>";

    return $date;
}

让我明白了是怎么回事。它打印:

2020-09-09 18:03:15
"2020-09-09T13:33:15.824992Z"

第一个是正确的,它的时区是config/app.timezone中设置的那个。调用 new DateTime() 结果相同。第二个是 laravel 控制器的结果。它以 UTC 时区显示日期。这就是 laravel 转换它的方式(使用 Carbon 的 toJSON 方法)。 但是日期的时区是正确的 运行:

$anotherDate = Carbon::parse('2020-09-09 18:30:00');
echo "diff_mins : " . $anotherDate->diff($date)->i;

显示:

diff_mins : 26

符合预期。