我刚刚开始使用Carbon扩展(到目前为止似乎非常好),但我对Carbon::now()
函数感到困惑。根据文档,似乎这个函数应该反映用户当前时区的当前时间,但是,我似乎比GMT提前一小时。
即。当我在太平洋标准时间时,Carbon::now()
说2015-01-01 17:26:46
,目前2015-01-01 08:26:46
。
我是否必须为所有实例检测并输入用户本地时区?
是什么给出的? (我很可能对网站如何获得用户当地时间有一个基本的误解)
答案 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(说明来自链接):
php.ini
文件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
符合预期。