Javascript 如何获得正确的getTimezoneOffset()

Javascript 如何获得正确的getTimezoneOffset(),javascript,jquery,Javascript,Jquery,我需要能够通过使用javascript获得正确的时区偏移,如果用户禁用了自动调整时间时钟以节省他或她的计算机上的时间 例如,如果我打开自动调整DST,我将在6月份得到-420,在1月份得到-480(太平洋时区)。 然而,如果我禁用自动调整DST,我会在一月和六月得到-480 是否有任何方法可以纠正此行为,以便即使已勾选“自动调整DST时间”,也能获得预期的DST?这是我不久前使用过的函数,希望这能有所帮助 function TimezoneDetect(){ var dtDate = n

我需要能够通过使用javascript获得正确的时区偏移,如果用户禁用了自动调整时间时钟以节省他或她的计算机上的时间

例如,如果我打开自动调整DST,我将在6月份得到-420,在1月份得到-480(太平洋时区)。 然而,如果我禁用自动调整DST,我会在一月和六月得到-480


是否有任何方法可以纠正此行为,以便即使已勾选“自动调整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
}