[英]Carbon doesn't automatically convert timezone when using `diffForHumans()` on Laravel
我是Laravel的新手,正在和Carbon混在一起(这是我第一次使用甚至听说过它)。
我做了一个简单的博客,其中用Carbon的diffForHuman()
显示注释的created_at
( timestamp
列diffForHuman()
。 我设法显示它,但不是显示“ x分钟前”,而是显示“ z从现在开始的小时数”(恰好是我的时区与UTC之间的时差,即UTC + z),好像评论来自将来。
这是我的代码:
{{ $comment->created_at->diffForHumans() }}
由于我从未在config/app.php
更改时区,因此我假设Carbon不会在diffForHumans()
上自动将timestamp
转换为当前时区。
我是否必须明确设置时区以使Carbon显示正确的差异? 还是我做错了什么?
编辑:我完全知道apokryfos说了什么有关时间转换(将其保存在UTC中并将其转换为客户的时区以显示)。
我注意到了几件事。 首先,我使用php artisan serve
运行我的应用程序,并使用XAMPP运行我的数据库(10.1.33-MariaDB)。 因此,我的应用程序的时区是UTC(默认配置),并且我的数据库与我的计算机(UTC + z)相同。 所以我在想,也许当我的应用程序检索了created_at``timestamp
,我的数据库在机器的时区(UTC + z)中返回了created_at
,这很奇怪。 如果是这种情况,为什么Laravel在检索时不自动将timestamp
转换为应用程序的时区? 返回的timestamp
的时区是否可能被视为与应用程序具有相同的时区?
您可以使用accessor如下所示在返回模型之前在日期上应用时区:
public function getCreatedAtAttribute($date)
{
return Carbon::parse($date)->timezone('your time zone goes here'); //example Europe/Amsterdam
}
发生这种情况是因为我的应用程序和数据库具有不同的时区。 我的数据库使用XAMPP运行,时区与我的机器(UTC + z)相同,而我的应用程序使用php artisan serve
运行,因此具有默认配置的时区(UTC)。
在将我的应用程序配置为与计算机相同的时区后,Carbon的diffForHumans()
显示正确的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.