Я только что наткнулся на сафари, указав дату toLocaleDateString за день до даты между 2004/03/15 и 2004/04/04. Вот клип с сафари JS-консоли, демонстрирующий проблему:Ошибка в сафари toLocaleDateString между 2004/03/15 и 2004/04/04. Известны ли другие даты?
> (new Date(2004,2,14))
< Sun Mar 14 2004 00:00:00 GMT-0600 (CST)
> (new Date(2004,2,14)).toLocaleDateString()
< "March 14, 2004"
> (new Date(2004,2,15))
< Mon Mar 15 2004 00:00:00 GMT-0500 (CDT)
> (new Date(2004,2,15)).toLocaleDateString()
< "March 14, 2004"
> (new Date(2004,3,4))
< Sun Apr 04 2004 00:00:00 GMT-0500 (CDT)
> (new Date(2004,3,4)).toLocaleDateString()
< "April 3, 2004"
> (new Date(2004,3,5))
< Mon Apr 05 2004 00:00:00 GMT-0500 (CDT)
> (new Date(2004,3,5)).toLocaleDateString()
< "April 5, 2004"
Проблема присутствует как в версиях MacOS, так и в ios.
Пока он не исправлен, я могу вручную отредактировать даты в этом интервале вручную. Но, может быть, существуют и другие такие плохие интервалы времени, которые также нуждаются в коррекции? Что особенного в этих конкретных датах?
[Edit] OK, запуск следующего лайнера в сафари-контейнере javascript показывает, что в период между 1900 и 2100 годами существует более 180 таких интервалов. Поэтому вопрос должен быть изменен, каким будет лучший способ справиться с Эта проблема?
(function(){var from,last,now; for (var y=1900; y<2100;y++) for (var m=0;m<12;m++) for (var d=1;d<32;d++) { now = new Date(y,m,d); if (Date.parse(now.toLocaleDateString())!=Date.parse(now.toString())) {if (!from) from=now;} else if (from) {console.log(from.toDateString()+'-'+last.toDateString());from=null;}last=now;}})()
[РЕДАКТИРОВАТЬ 2] Оказалось, что плохие интервалы зависят от настроек часового пояса. Изменение часового пояса на ios с GMT-5 до GMT + 12 составило 200 интервалов, которые совершенно разные. Похоже, теперь я ищу предложения для замены toLocaleDateString в сафари alltogether