簡體   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