現在我的 Laravel 應用程式將基于此時間戳的任何專案保存()到資料庫中。America/New_York因為我'timezone' => 'America/New_York',在 config/app.php 中配置了它。
目標
我希望根據其他 tz 覆寫時間戳,例如。 America/Chicago
我怎么做?
uj5u.com熱心網友回復:
你也不需要
MySQL 將 TIMESTAMP 值從當前時區轉換為 UTC 進行存盤,并從 UTC 轉換回當前時區進行檢索。(這不會發生在其他型別,例如 DATETIME。)
見https://dev.mysql.com/doc/refman/5.7/en/datetime.html
因此,當您將服務器更改為另一個時區時,所有時間戳都會獲得新的時區
設定時區就像
SET GLOBAL time_zone = 'America/Chicago';
uj5u.com熱心網友回復:
你不必做瘋狂的事情......你要做的是:
UTC將時間存盤在已知時區中,并且永遠不要再更改該時區,如果您將其用作默認時區,那就太棒了。- 當您想“轉換”時區時,您只需
$model->created_at(或任何Carbon物件)并執行$model->created_at->setTimezone('America/Chicago');(例如)。
主要思想是,當您已經有一個Carbon帶有時間戳的實體時,您只需將時區更改為setTimezone您想要的新時區,它將回傳一個Carbon具有該時區的新實體......
看看這個SO 主題。
另外,請記住,這timestamp只是integer表示自 以來經過了多少秒1970-01-01 00:00:01 (UTC),因此,如果您說“給我特定時區的特定日期和時間的時間戳”,timestamp即使您每次都更改時區,它也將始終相同。 . 這是timestamp...的主要思想
如果我說“時間戳是什么1970-01-01 00:00:10?”,如果你在,UTC你會得到10,因為從那個特定時間過去了 10 秒datetime,如果你在 UTC 1,它仍然是10秒,但你會顯示1970-01-01 00:01:10,因為你是1小時提前UTC,如果你在UTC-1它會1969-12-31 23:00:10,因為你1落后一小時UTC,但你知道如何進行轉換,這就是為什么不管時區,值總是相同的,這也是為什么它是1970-01-01 00:00:00而不是任何其他具體datetime,因為如果您不知道哪個具體datetime,您將不知道如何進行轉換。
了解您正在使用的內容非常重要,因此為了幫助您更好地理解,請查看此博客,解釋相同但更詳細的內容。
uj5u.com熱心網友回復:
無論您的本地時區設定如何,PHP 中生成的時間戳都是 UTC 時間。
您可以使用setTimezone在 UI 中顯示時間戳之前調整其時區。
參考:
- https://www.php.net/manual/en/function.time.php
https://www.php.net/manual/en/datetime.gettimestamp.php
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419413.html
標籤:
