簡體   English   中英

MySql 中頻夏令時

[英]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% 表已填充)例如PST8PDTAmerica/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.

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