IE8 setInterval и setTimeout запускаются сразу после 49 дней безотказной работы

Поскольку система Windows работает почти 49,7 дней, внутренний счетчик миллисекунд Windows приближается к 2 ^ 32. Ошибка в Internet Explorer 8, кажется, имеет арифметическое переполнение при вычислении, когда запускать событие setInterval или setTimeout. Например, если вы находитесь в 49-й день безотказной работы и вызываете

setInterval(func, 86400000); // fire event in 24 hours

, функция будет вызываться немедленно, а не через 24 часа.

Эта ошибка, вероятно, возникнет в любое время после 25 дней безотказной работы (2 ^ 31 миллисекунды) если в setInterval или setTimeout передается достаточно большое число. (Я проверил только 49-й день.)

Вы можете проверить количество дней безотказной работы, введя "сервер сетевой статистики" в командной строке.

Есть ли обходной путь?

10
задан user281806 6 December 2010 в 21:26
поделиться