我刚开始使用Carbon扩展(到目前为止看起来很不错),但我对Carbon::now()函数感到困惑。根据文档,似乎这个函数应该反映用户当前时区的当前时间,然而,我似乎得到了比GMT提前一个小时的时间。即Carbon::now()说2015-01-01 17:26:46当我在PST和它实际上目前是2015-01-01 08:26:46。我必须为所有示例检测并输入用户的本地时区吗?(我很可能对网站如何获取用户的本地时间有一个根本的误解)
Carbon::now()
2015-01-01 17:26:46
2015-01-01 08:26:46
yh2wf1be1#
Carbon基于UTC,因此只需执行Carbon::now()即可以UTC格式输出时间您必须指定时区,以准确反映您所在城市或地区的日期时间。有两种方法可以做到这一点。你可以做:Carbon::now('PST')或 Carbon::now('Continent/City') 例如(Carbon::now('America/Montreal')
Carbon::now('PST')
(Carbon::now('America/Montreal')
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。
php.ini
US/Central
xurqigkl3#
在config/app.php中更改时区
'timezone' => 'YOUR TIME ZONE',
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如预期的那样。
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
config
app.php
timezone
'timezone' => 'Asia/YOUR_LOCATION',
.env
APP_TIMEZONE='Asia/YOUR_LOCATION'
'timezone' => env('APP_TIMEZONE', 'UTC'),
php artisan config:clear
5条答案
按热度按时间yh2wf1be1#
Carbon基于UTC,因此只需执行
Carbon::now()
即可以UTC格式输出时间您必须指定时区,以准确反映您所在城市或地区的日期时间。
有两种方法可以做到这一点。你可以做:
Carbon::now('PST')
或 Carbon::now('Continent/City') 例如(Carbon::now('America/Montreal')
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。xurqigkl3#
在config/app.php中更改时区
xhv8bpkk4#
对于其他人想知道为什么(有时)**Carbon::now()结果与new DateTime()**不同:
正在运行以下...
让我明白了发生了什么。上面写着:
2020-09-09 18:03:15
“2020-09-09T13:33:15.824992Z”
第一个是正确的,它的时区是在config/app. timezone中设置的。调用new DateTime()的结果是一样的。第二个是laravel控制器的结果。它显示的是UTC时区的日期。这是laravel转换它的方式(使用Carbon的toJSON方法)。但是日期的时区是正确的,并且正在运行:
显示:
diff_mins:26
如预期的那样。
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