碳现在错了

时间:2015-01-01 16:32:50

标签: php datetime laravel php-carbon

我刚刚开始使用Carbon扩展(到目前为止似乎非常好),但我对Carbon::now()函数感到困惑。根据文档,似乎这个函数应该反映用户当前时区的当前时间,但是,我似乎比GMT提前一小时。

即。当我在太平洋标准时间时,Carbon::now()2015-01-01 17:26:46,目前2015-01-01 08:26:46

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

是什么给出的? (我很可能对网站如何获得用户当地时间有一个基本的误解)

4 个答案:

答案 0 :(得分:11)

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

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

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

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

答案 1 :(得分:9)

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

这可能是由以下原因引起的:

  • 服务器配置错误
  • 服务器的物理位置位于不同的时区
  • 您的提供商的政策也可能导致此问题。如果您的提供商决定他们希望在世界各地的每台服务器上使用相同的时区,这将导致问题。

服务器的时区似乎是CET(中欧时间),正如您所描述的那样是+1 GMT。

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

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

    date.timezone =“US / Central”

    或者,如果您希望PHP使用其他时区,则应将US/Central时区替换为所需的时区as outlined here

答案 2 :(得分:0)

在config / app.php中更改您的时区

 'timezone' => 'YOUR TIME ZONE',

答案 3 :(得分:0)

对于任何其他人(为什么) 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

符合预期。