Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 碳不';在Laravel上使用'diffForHumans()'时,不会自动转换时区_Php_Laravel_Php Carbon - Fatal编程技术网

Php 碳不';在Laravel上使用'diffForHumans()'时,不会自动转换时区

Php 碳不';在Laravel上使用'diffForHumans()'时,不会自动转换时区,php,laravel,php-carbon,Php,Laravel,Php Carbon,我是拉威尔的新手,在碳元素上乱搞(这是我第一次使用它,甚至是第一次听说它) 我制作了一个简单的博客,其中显示了在(一个时间戳栏)创建的注释,以及碳元素的diffForHuman()。我设法显示了它,但它显示的不是“x分钟前”,而是“从现在开始的z小时”(正好是我的时区和UTC之间的差异,即UTC+z),好像这些评论来自未来 这是我的密码: {{ $comment->created_at->diffForHumans() }} 由于我从未在我的config/app.php中更改时区,

我是拉威尔的新手,在碳元素上乱搞(这是我第一次使用它,甚至是第一次听说它)

我制作了一个简单的博客,其中显示了在(一个
时间戳
栏)创建的注释
,以及碳元素的
diffForHuman()
。我设法显示了它,但它显示的不是“x分钟前”,而是“从现在开始的z小时”(正好是我的时区和UTC之间的差异,即UTC+z),好像这些评论来自未来

这是我的密码:

{{ $comment->created_at->diffForHumans() }}
由于我从未在我的
config/app.php
中更改时区,因此我假设Carbon不会在
diffForHumans()
上自动将
timestamp
转换为当前时区

我是否必须明确设置时区,以使碳显示具有正确的差异?还是我做错了什么

编辑: 我完全了解apokryfos关于时间转换的说法(将其保存在UTC中,并将其转换为客户端时区以供显示)


我注意到了一些事情。首先,我用php artisan serve运行我的应用程序,用XAMPP运行我的DB(10.1.33-MariaDB)。因此,我的应用程序的时区是UTC(默认配置),我的DB与我的机器相同(UTC+z)。所以我在想,也许当我的应用程序检索到在``timestamp
创建的
时,我的数据库返回了在我机器时区(UTC+z)创建的
,这很奇怪如果是这种情况,为什么拉威尔在检索时不自动将
时间戳
转换为应用程序的时区?
是否可能将返回的
时间戳
的时区视为与应用程序具有相同的时区?

您可以使用访问器在模型中返回前的日期应用时区详情如下:

    public function getCreatedAtAttribute($date)
{
    return Carbon::parse($date)->timezone('your time zone goes here'); //example  Europe/Amsterdam
}

这是因为我的应用程序和数据库的时区不同。我的DB使用XAMPP运行,时区与我的机器相同(UTC+z),我的应用程序使用
php artisan serve运行,时区为默认配置(UTC)


将我的应用程序配置到与我的机器相同的时区后,Carbon的
diffForHumans()
显示了正确的差异。

config/app.php
中设置了什么时区
UTC
UTC+z
?传统的做法是将服务器端设置为UTC,并在客户端转换时区,因为浏览器可以访问用户的首选时区,而服务器不能访问。@fubar UTC。我必须把它改成我的时区,这样差别就大了right@apokryfos我知道这一点,但我认为由于差异是在服务器端处理的,因此不需要进行转换。根据您注意到的,您的数据库与应用程序设置的时区不同。这可能会导致MySQL将时间戳转换为它的时区,然后laravel假设它在应用程序时区接收到它,从而导致问题。请注意,时间戳实际上并不保留时区。