如果用戶在他或她的計算機上禁用了「自動調整夏令時節省時間」,則需要使用javascript來獲取正確的timezoneOffset。如何獲取正確的getTimezoneOffset()
例如,如果我打開自動調整夏令時,我在六月獲得-420,在太平洋時區一月-480。
但是,如果我禁用自動調整夏令時,我得到-480一月和六月。
是否有任何方法來糾正這種行爲,以便即使自動調整DST時間,我也能得到預期的DST時間?
如果用戶在他或她的計算機上禁用了「自動調整夏令時節省時間」,則需要使用javascript來獲取正確的timezoneOffset。如何獲取正確的getTimezoneOffset()
例如,如果我打開自動調整夏令時,我在六月獲得-420,在太平洋時區一月-480。
但是,如果我禁用自動調整夏令時,我得到-480一月和六月。
是否有任何方法來糾正這種行爲,以便即使自動調整DST時間,我也能得到預期的DST時間?
這是我以前用過的一個功能(source),希望對你有所幫助。
function TimezoneDetect(){
var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
var intMonth;
var intHoursUtc;
var intHours;
var intDaysMultiplyBy;
//go through each month to find the lowest offset to account for DST
for (intMonth=0;intMonth < 12;intMonth++){
//go to the next month
dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);
//To ignore daylight saving time look for the lowest offset.
//Since, during DST, the clock moves forward, it'll be a bigger number.
if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
intOffset = (dtDate.getTimezoneOffset() * (-1));
}
}
return intOffset;
}
要檢測DST不使用getTimezoneOffset
使用這樣的:
var rightNow = new Date();
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var temp = jan1.toGMTString();
var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var std_time_offset = (jan1 - jan2)/(1000 * 60 * 60);
var june1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
temp = june1.toGMTString();
var june2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var daylight_time_offset = (june1 - june2)/(1000 * 60 * 60);
var dst;
if (std_time_offset == daylight_time_offset) {
dst = "0"; // daylight savings time is NOT observed
} else {
dst = "1"; // daylight savings time is observed
}
這是不可能的事情。 – zerkms
好吧,你可以問一個用戶。 – zerkms
如果用戶爲了某個特定原因而做了這些操作,該怎麼辦? –