簡體   English   中英

使用 PHP 在 MySQL 數據庫中從 UTC 正確轉換為時區

[英]Correctly converting to timezone from UTC in MySQL database with PHP

我看到 phpmyadmin 中存儲的日期值為 2020-03-03。 在 PHP 中,我將默認時區設置為 UTC,將用戶的時區設置為 America/New_York:

date_default_timezone_set('UTC');
$userTimeZone = new DateTimeZone('America/New_York');

我從數據庫中檢索我的日期,在日期上設置時區,並將其轉換為字符串。 現在等於一天前。 (03-02-2020)

$dateNeeded = new DateTime($row['dateNeeded']); 
$dateNeeded->setTimeZone($userTimeZone);
$dateNeededStr = $dateNeeded->format('m-d-Y');

我在這里做錯了什么?

這是不正確的。 您的日期存儲時沒有時間組件,這意味着當您將其放入DateTime構造函數時,它將被創建為午夜( $dateNeeded = new DateTime($row['dateNeeded'])將具有2020-03-03 00:00:00

這是在 UTC 時區,因為您在開始時就定義了它。 因此,當您更改時區時,它將返回(因為紐約是 UTC - 5)並獲得2020-03-02 19:00:00的值。

由於您僅以您的格式輸出日期(而不是時間),因此它會提前一天輸出。

不要使用date_default_timezone_set('UTC'); 因為 MySQL 服務器將使用服務器時區而不是 UTC,

例如,

您的服務器時區是 GMT +2

並且您將服務器時區設置為 GMT +0;

然后您在存儲在 GMT + 2 時區的數據庫上讀取您的日期

當您嘗試將其轉換為其他時區時,例如 GMT + 5,

它將移動 7 小時而不是 5 小時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM