PHP、MySQL 和時區:綜合指南
時區可能是一個複雜且令人困惑的主題,尤其是在使用PHP 時和MySQL。本文旨在提供對該主題的全面理解,解決原始問題和賞金中提出的附加點。
在 MySQL 中儲存日期時間
確保為了保持一致性,建議以 UTC 格式儲存 MySQL 中的所有日期時間。這可以防止夏令時 (DST) 出現問題,並保證時間戳記得到合理處理。
選擇 DATETIME 與 TIMESTAMP
大多數情況下應使用 DATIME,因為它允許更廣泛的值並提供更大的靈活性。 TIMESTAMP 適用於需要自動時間戳記且值範圍有限的情況。
MySQL DATE 和時區
MySQL DATE 值不包含時間或時區信息,因此它們不受時區的影響。
使用插入值NOW()
使用 NOW() 插入值時,請確保 MySQL 連線時區設定為 UTC。這將確保插入的日期時間採用 UTC,無論伺服器的時區為何。
設定 MySQL 使用的時區
MySQL 連線時區應永久設定為 UTC ,確保 MySQL 處理的所有日期時間一致。
從以下位置檢索值MySQL
從 MySQL 檢索的日期時間可以安全地傳遞給 PHP DateTime 建構子。指定 UTC 時區以確保正確處理。
時區之間轉換
在echo 上將PHP DateTimes 轉換為使用者的本地時區,確保它們以正確的格式顯示.
夏令時(DST)
DST 應由PHP 支援的指定時區處理。透過以 UTC 格式儲存時間戳記並在顯示時進行轉換,系統會自動處理 DST 變更。
修復不帶時區的現有資料
如果先前插入的資料不帶時區,建議使用MySQL 的CONVERT_TZ 函數或在select 和過程中執行伺服器本機時區轉換更新。
使用者時區選擇
呈現可供選擇的指定時區清單給使用者。這允許他們選擇位置並自動應用 DST 規則。
使用 PHP DateTimeZone 作為時區選擇器
DateTimeZone 可用來產生可用時間清單區。以下程式碼示範如何顯示不同時區的時間:
$dt = new DateTime('now', new DateTimeZone('UTC')); foreach(DateTimeZone::listIdentifiers() as $tz) { $dt->setTimeZone(new DateTimeZone($tz)); echo $tz, ': ', $dt->format('Y-m-d H:i:s'), "\n"; }
使用 JavaScript 確定使用者時區
JavaScript 的 Date 類別可用於確定使用者的 UTC 偏移(以分鐘為單位),為縮小可能的時區清單提供起點。
結論
透過遵循這些準則並利用現代 PHP 和 MySQL 工具集,您可以有效地管理時區並確保應用程式的一致性。
以上是如何有效管理 PHP 和 MySQL 應用程式中的時區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!