2015-06-22 6 views
0

Я только что наткнулся на сафари, указав дату 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

ответ

0

Вот обходной путь - добавьте час к дате. То есть, изменение даты (y, m, d) на Date (y, m, d, 1) не приводит к выходу в вышеописанном тесте one0liner.