簡體   English   中英

DST 問題在 Javascript 日期 object 中存儲日期

[英]DST problem storing date in Javascript Date object

我有這個簡單的 Javascript 代碼

var d = new Date(2011, 9, 8);
alert(d); // Show: Fri Oct 7 23:00:00 UTC-0400 2011

重要提示:我的時區是“智利聖地亞哥”,我將計算機時鍾設置為:2011 年 10 月 2 日。

警報顯示 Day is 7 ...?? 為什么? 我怎樣才能做到正確? (問題只在這一天)

根據this page智利的夏令時更改總是在十月的第二個完整周末並從午夜開始(讓我們忽略今年延長的夏令時,因為您的計算機很可能不知道它)。

這意味着,正如使用我之前鏈接到的腳本所顯示的那樣,在您的時區 2011 年 10 月 8 日午夜不能用UTC-0300表示,因此它會自動切換到UTC-0400來表示同一時間。

我可以通過詢問 2011 年 3 月 27 日星期日凌晨 2:00(當前時區 CEST= UTC+0200 )在我的時區(阿姆斯特丹,UTC+1/2h)重現您的問題(夏令時 (CEST) 開始和時鍾從 UTC+0100 調整為 UTC+0200)(記住這在北半球正好相反))

new Date(2011, 2, 27, 2, 0, 0, 0);

這實際上無法用UTC+0200表示,因此系統選擇UTC+0100並輸出

Sun Mar 27 2011 01:00:00 GMT+0100 (CET)

因此,它在Unix 時間中是同一時間,只是在您當地的時區中表示不同。

是的,我知道 10 月 8 日是星期六,夏令時更改從星期日午夜開始,但這是我能得到的最接近的日期。


更新:我現在可以通過將 WinXP 機器的時區設置為 Santiago讓操作系統自動調整 DST提醒new Date(2011, 9, 9)來重現您的問題(這是星期日,顯示為星期六;那里您的設置一定很奇怪)。 當然,您無法在客戶端上控制這些設置。

要解決這個問題,我必須知道您到底需要什么:如果您只想要一些不考慮時區和 DST 的日期/時間顯示,只需使用 UTC,例如:

var d = new Date(Date.UTC(2011, 9, 9));
alert(d.toUTCString()); // Shows: Sun, 9 Oct 2011 00:00:00 UTC

要顯示/計算Date object 的各個部分,請使用相應的UTC 方法

暫無
暫無

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

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