我刚开始使用 Carbon 扩展(到目前为止看起来很不错),但对Carbon::now()
功能感到困惑。根据文档,这个函数似乎应该反映用户当前时区的当前时间,但是,我似乎得到了一个比格林威治标准时间早一个小时的时间。
即Carbon::now()
说2015-01-01 17:26:46
当我在 PST 时,实际上是当前2015-01-01 08:26:46
。
我是否必须为所有实例检测并输入用户本地时区?
是什么赋予了?(我很可能对网站如何在本地获取用户存在根本性的误解)
我刚开始使用 Carbon 扩展(到目前为止看起来很不错),但对Carbon::now()
功能感到困惑。根据文档,这个函数似乎应该反映用户当前时区的当前时间,但是,我似乎得到了一个比格林威治标准时间早一个小时的时间。
即Carbon::now()
说2015-01-01 17:26:46
当我在 PST 时,实际上是当前2015-01-01 08:26:46
。
我是否必须为所有实例检测并输入用户本地时区?
是什么赋予了?(我很可能对网站如何在本地获取用户存在根本性的误解)
Carbon 是基于 UTC 的,因此只需执行Carbon::now()
将输出 UTC 格式的时间
您必须指定时区才能准确反映您所在城市或地区的日期时间。
有两种方法可以做到这一点。你可以这样做:
Carbon::now('PST')
或Carbon::now('Continent/City'(Carbon::now('America/Montreal')
)例如
这似乎是因为您的服务器的时区与您自己的不同。
这可能是由以下原因引起的:
如您所述,服务器的时区似乎是 CET(中欧时间),即 +1 GMT。
要解决此问题,您应该更改php.ini
文件中的时区(说明来自链接):
php.ini
文件date.timezone = "美国/中部"
或者,如果您希望 PHP 使用另一个时区,则应使用此处概述US/Central
的所需时区替换时区。
在 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
正如预期的那样。