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