[英]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.