Я использую следующий фрагмент кода для определения различных значений, связанных с часовым поясом, сообщаемым операционной системой.
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 могло вызвать больше проблем.