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