繁体   English   中英

在Laravel上使用`diffForHumans()`,Carbon不会自动转换时区

[英]Carbon doesn't automatically convert timezone when using `diffForHumans()` on Laravel

我是Laravel的新手,正在和Carbon混在一起(这是我第一次使用甚至听说过它)。

我做了一个简单的博客,其中用Carbon的diffForHuman()显示注释的created_attimestampdiffForHuman() 我设法显示它,但不是显示“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM