我有一個網站可以將數據加載到MySQL表中。表中的兩個條目是「startdate」和「enddate」。 'startdate'是使用CURRENT_TIMESTAMP自動執行的。 'enddate'是用戶使用日期選擇器選擇的。PHP同步時區夏時制問題
如果用戶位於與服務器不同的時區,則會產生問題。例如(我在太平洋時區,服務器在中央)。如果我在下午5點創建一個入口並選擇結束日期爲晚上10點,它會在晚上7點和晚上10點進入數據庫,創建一個3小時的窗口而不是5.我想要的是將結束日期轉換爲中央時間(相同作爲服務器)。因此,使用我的示例,我希望數據庫中的條目是下午7點和午夜12點。
我可以得到用戶時區與此JavaScript偏移:
var d = new Date();
var timezone = -d.getTimezoneOffset()/60;
這將返回-7(我在GMT-8,我假定1小時的DIF是因爲夏令時) 。我首先想到的解決方案是假設服務器在-5,並比較兩個(回到我的例子,-5 - -7 = 2,所以加2到'enddate')。
問題出現在我們切換回標準時間。我認爲我的JavaScript將開始返回-8而不是-7,打破了我的功能。我知道PHP的date_default_timezone_get(),但是它返回一個字符串而不是數字。我想我需要的是一個類似的功能,可以(對於中央時間)在日光節約期間返回-5,在標準時間期間返回-6。
你不能以UTC獲得所有相關日期嗎? –
如果你使用的是mysql'timestamp'字段 - 那麼一切都應該沒問題。只需在mysql會話開始時指定正確的客戶端時區即可。 – zerkms
我使用時間戳只用於始終是中心時間的'startdate'。 'enddate'來自日期選擇器,它基於用戶的當地時間。我需要一種方法將用戶的本地時間轉換爲中央時間。 – user617123