[英]MySql IF daylight saving
我有保存在 UTC +00:00 中的日期的表格。 mysql 前調用 PHP 設置時區偏移量,帶或不帶夏令時:
date_default_timezone_set($tzone);
$tzoffset = date("P");
Mysql 調用會根據用戶時區增加小時數:
CONVERT_TZ(d.dateTime,'+00:00', '".$tzoffset."') AS dateTime,
夏令時前的昨天 09:00,今天顯示為 10:00。 如何在原始時間從夏令時之前檢索日期? 我在 PHP 中使用的 Mysql 調用中的某種 IF 邏輯?
$date = new DateTime( $row[ 'dateTime' ] );
$tzDaylightSaving = $date->format("I"); //checking if daylight saving for specific time is active
if ($tzDaylightSaving == 1)
{
$date->add(new DateInterval('PT1H')); //if daylight saving is active, add one hour
}
這並不是真正的 MySQL 問題。 在對CONVERT_TZ
的調用中,就 MySQL 所見,客戶端 SQL 指定了與 UTC 的固定偏移量。 從代碼來看,該偏移量似乎是從當前日期和時間派生的,與 datetime 值是否存儲在dateTime
列中無關。
MySQL 完全能夠處理遵守夏令時的時區。 我們可以傳入實際的 time_zone 值(假設 mysql.time_zone% 表已填充)例如PST8PDT
或America/Chicago
CONVERT_TZ( t.datetime_utc ,'+00:00','PST8PDT')
CONVERT_TZ( t.datetime_utc ,'+00:00','America/Chicago')
或者,我們可以只從 MySQL 返回 UTC 值,然后在代碼中進行轉換。
如果我們承諾在 SQL 文本中發送一個固定偏移量,並從 UTC 返回一個日期時間值偏移量,那么在代碼中,我們需要考慮到這一點。
如代碼所示, MySQL 返回的值不在time_zone $tzone
中。 這是一個與 UTC 有固定偏移的值。 當我們 go 將該值實例化為 PHP DateTime 時,代碼使用了錯誤的 time_zone。 我們需要將 MYSQL 值解釋為與 UTC 的固定偏移量。
在代碼中它正在執行if
檢查時,為時已晚。 $date
值是錯誤的,因為它被解釋為好像它在默認時區$tzone
... 而不是。 MySQL 中的值已移動了固定的小時數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.