php 碳现在时间错误

llmtgqce  于 2023-03-21  发布在  PHP
关注(0)|答案(5)|浏览(131)

我刚开始使用Carbon扩展(到目前为止看起来很不错),但我对Carbon::now()函数感到困惑。根据文档,似乎这个函数应该反映用户当前时区的当前时间,然而,我似乎得到了比GMT提前一个小时的时间。
Carbon::now()2015-01-01 17:26:46当我在PST和它实际上目前是2015-01-01 08:26:46
我必须为所有示例检测并输入用户的本地时区吗?
(我很可能对网站如何获取用户的本地时间有一个根本的误解)

yh2wf1be

yh2wf1be1#

Carbon基于UTC,因此只需执行Carbon::now()即可以UTC格式输出时间
您必须指定时区,以准确反映您所在城市或地区的日期时间。
有两种方法可以做到这一点。你可以做:
Carbon::now('PST')Carbon::now('Continent/City') 例如(Carbon::now('America/Montreal')

uujelgoq

uujelgoq2#

这可能是因为您的服务器的时区与您自己的时区不同。
这可能是由于:

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

服务器的时区显示为CET(中欧时间),即+1 GMT,正如您所描述的。
要解决这个问题,您应该change the timezone in your php.ini file(说明来自链接):
1.打开php.ini文件
1.将以下代码行添加到php.ini文件的顶部:
date.timezone =“美国/中部”
或者,如果您希望PHP使用另一个时区,您应该将US/Central时区替换为所需的时区as outlined here

xurqigkl

xurqigkl3#

在config/app.php中更改时区

'timezone' => 'YOUR TIME ZONE',
xhv8bpkk

xhv8bpkk4#

对于其他人想知道为什么(有时)**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
如预期的那样。

qmb5sa22

qmb5sa225#

有两种方法可以更改时区。
备选办法1
从项目根目录中,打开config目录。
接下来编辑app.php文件,并将timezone值从UTC编辑为可用时区列表中所需的时区。
'timezone' => 'Asia/YOUR_LOCATION',
备选办法2
.env文件中进行修改以指定时区,如下所示:
APP_TIMEZONE='Asia/YOUR_LOCATION'
然后,在app.php文件中添加以下内容:
'timezone' => env('APP_TIMEZONE', 'UTC'),
最后,
php artisan config:clear

相关问题