在最新版本的firefox中使用javascript获取时区信息的问题(64)

时间:2019-01-28 18:33:59

标签: javascript firefox

我使用以下代码片段来确定与操作系统报告的时区相关的不同值。

var oldOffset;
var dstBegin;
var dstEnd;
var dstDuration;
var inDayLightTimeFlag;
var useDayLightTimeFlag;
var arr = [];

var d = new Date();
d.setHours(12,0,0,0);
var currOffset = d.getTimezoneOffset();
var daysInYear = 365;
for(var i=1; i<=daysInYear; i++){
    d = new Date();
    //Defaulting time to 12:00PM each day as DST should have already been observed/no longer observed by that time
    d.setHours(12,0,0,0);
    d.setDate(i);
    var newOffset = d.getTimezoneOffset();
    if(i !== 1 && newOffset != oldOffset){
        if(newOffset < oldOffset){
            dstBegin = i;
        } else if(newOffset > oldOffset) {
            dstEnd = i;
        }
    }
    arr.push(newOffset);
    oldOffset = d.getTimezoneOffset();
}

var DST = Math.min.apply(null,arr);
var nonDST = Math.max.apply(null,arr);
console.log("IN DST Flag: " + inDayLightTimeFlag);
console.log("USE DST Flag: " + useDayLightTimeFlag);
console.log("Duration: " + dstDuration);
console.log("Begin: " + dstBegin);
console.log("End: " + dstEnd);

我在堆栈溢出的另一篇文章中得到了这段代码,它工作了一段时间。但是现在我看到了喜忧参半的结果。它在Chrome,IE和Edge中可以正常工作,但在某些情况下在Firefox中则不能。

在遇到问题的情况下,我将计算机时区设置为美国/中央(我在Windows 10上),并且未选中夏令时复选框。

在Chrome / IE / Edge中,从以上代码返回的值是:

  

inDayLightTimeFlag:false
  useDayLightTimeFlag:false
  dstDuration:0
  dstBegin:0
  dstEnd:0

在这种情况下哪个是正确的结果。

但是在firefox中,我得到以下值:

  

inDayLightTimeFlag:false
  useDayLightTimeFlag:true
  dstDuration:60
  dstBegin:69
  dstEnd:307

这是错误的。我们在不同版本的firefox上进行了测试,它在62中可以正常工作,但问题始于63及更高版本。似乎是由于最近对Firefox的更改引起的:https://bugzilla.mozilla.org/show_bug.cgi?id=1346211

有什么想法吗?寻找一种使浏览器尽可能独立的方法,但似乎Firefox中的错误解决可能导致了更多问题。

0 个答案:

没有答案