有沒有辦法獲得DST轉換的時間。例如,有一些奇怪的時區出現了30分鐘的過渡。我得到這個的另一種方法是獲得標準和dst時間的utc偏移量,我可以減去這兩個偏移量。如何從MomentJS獲得DST金額
如果我做moment.tz(「美國/芝加哥」)._ z.offsets我可以訪問一個大陣的所有偏移。不過,我需要知道該數組中的哪個索引是當前年份。
有什麼想法?
有沒有辦法獲得DST轉換的時間。例如,有一些奇怪的時區出現了30分鐘的過渡。我得到這個的另一種方法是獲得標準和dst時間的utc偏移量,我可以減去這兩個偏移量。如何從MomentJS獲得DST金額
如果我做moment.tz(「美國/芝加哥」)._ z.offsets我可以訪問一個大陣的所有偏移。不過,我需要知道該數組中的哪個索引是當前年份。
有什麼想法?
這將返回1月1日和今年的6月1日之間UTC偏移電流差 - 這可能是你在找什麼:
function getDSTBias(tz) {
var janOffset = moment.tz({month: 0, day: 1}, tz).utcOffset();
var junOffset = moment.tz({month: 5, day: 1}, tz).utcOffset();
return Math.abs(junOffset - janOffset);
}
這些都是比較安全的日期進行測試,如他們正處於冬季和夏季的中間 - 儘管這取決於北半球或南半球。在這兩個日期沒有DST轉換將發生anywhere in the world。
您可能會看到其他代碼,建議7月1日,但DST weirdness in Morocco可以使7月1日標準時間日期。
如果你不喜歡硬編碼日期的想法,這裏是一個替代方法:
function getOffsetDelta(tz) {
var z = moment.tz.zone(tz);
var i = z._index(moment());
return i < z.offsets.length-1 ? Math.abs(z.offsets[i] - z.offsets[i+1]) : 0;
}
這種方法使現在和任何下一個計劃是轉型之間的偏移量的差異。請注意,除了DST之外,還有其他的轉換原因 - 比如標準偏移量的變化。
另外請注意,這種替代方法不限制時間到當前年份。所以如果DST計劃在未來一年被取消,它將反映在結果中。你可以改變這種測試對最後過渡,但是這也將會給奇怪的結果如稱America/Phoenix
具有60分鐘三角洲,因爲Arizona experimented briefly with DST in 1967。
因此,在大多數情況下,第一種方法可能是最好的。
你能檢查這是否有幫助嗎? http://momentjs.com/timezone/docs/#/using-timezones/parsing-ambiguous-inputs/ – Raghavan
您可以爲6月1日和12月1日創建一個日期,並比較時區偏移量。有很多地方根本沒有夏令時。 – RobG
我稍後會發布更完整的答案,但羅布大部分都是正確的。創建兩個時刻並檢查它們之間的「utcOffset」差異。請記住,多年來轉換可能發生了變化,並非所有轉換都是由於DST引起的。此外,當前* DST轉換30分鐘的唯一區域是「Australia/Lord_Howe」。其餘的都是1小時或根本沒有。哦,然後是南極洲。 ;) –