Javascript 如何获得正确的getTimezoneOffset()
我需要能够通过使用javascript获得正确的时区偏移,如果用户禁用了自动调整时间时钟以节省他或她的计算机上的时间 例如,如果我打开自动调整DST,我将在6月份得到-420,在1月份得到-480(太平洋时区)。 然而,如果我禁用自动调整DST,我会在一月和六月得到-480Javascript 如何获得正确的getTimezoneOffset(),javascript,jquery,Javascript,Jquery,我需要能够通过使用javascript获得正确的时区偏移,如果用户禁用了自动调整时间时钟以节省他或她的计算机上的时间 例如,如果我打开自动调整DST,我将在6月份得到-420,在1月份得到-480(太平洋时区)。 然而,如果我禁用自动调整DST,我会在一月和六月得到-480 是否有任何方法可以纠正此行为,以便即使已勾选“自动调整DST时间”,也能获得预期的DST?这是我不久前使用过的函数,希望这能有所帮助 function TimezoneDetect(){ var dtDate = n
是否有任何方法可以纠正此行为,以便即使已勾选“自动调整DST时间”,也能获得预期的DST?这是我不久前使用过的函数,希望这能有所帮助
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;
}
这是不可能的。好吧,你可以问用户。如果用户这样做是因为一个特定的原因呢?正如OP所说的-时区设置在用户的机器上是不正确的。因此,我不确定依赖不可靠的数据怎么会产生垃圾以外的东西。他没有说时区不正确,他说为日光节约时间而自动调整的时钟被禁用了。这和我说的不一样,但被包装成了一个用户友好的短语吗?如果您不知道时区名称,您不知道何时应用DST,如果您不知道它是否已关闭-您无法做出正确的决定,您只能尝试猜测。@zerkms我已更新了我的答案-您是正确的,但无需猜测:-Roni我尝试了上述函数,但是,当我在windows计算机上选择太平洋时区并取消选中自动调整DST设置的选项时,我的夏令时为0。但在太平洋时区可以观测到夏令时。
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
}