2017-01-02 5 views
0

Я использую функцию javascript класса Date toLocaleDateString() в проекте, чтобы получить правильное форматирование в соответствии с локали пользователя, так просто. Однако день месяца не всегда прав (это на один день меньше, чем ожидалось). Кажется, я не понимаю, почему это происходит.Неправильная дата с функцией javascript toLocaleDateString()

Я построил jsfiddle, чтобы показать проблему. Это происходит с октября октября. Дата должна быть 3, как и во всех других месяцев, но как-то это 2.

https://jsfiddle.net/vincepunkrock/nh1u3ord/

Вот важная часть кода, и результат (My локаль «де»):

for(var i = 0; i < 12; i++) 
{ 
    var d = new Date(1993,i,3); 
    var n = d.toLocaleDateString(); 
    document.getElementById("demo").innerHTML += n + "<br>"; 
} 

3.1.1993 
3.2.1993 
3.3.1993 
3.4.1993 
3.5.1993 
3.6.1993 
3.7.1993 
3.8.1993 
3.9.1993 
2.10.1993 
3.11.1993 
3.12.1993 

У вас, ребята, есть представление о том, что происходит здесь, и что я могу сделать для его решения?

спасибо!

+2

Когда в 1993 году в вашем регионе было закончено «летнее время» (или «летнее время»)? – Pointy

+0

Это было на септе. Двадцать шестой. Действительно, когда я установил дату на 27-е, я получаю 26-е место в течение месяцев сентября и октября. Вы были на правильном пути! –

+0

"* ... чтобы получить правильное форматирование в соответствии с локали пользователя ... *". Нет никакой гарантии, что это произойдет, поскольку * toLocaleDateString * полностью зависит от реализации, и некоторые реализации, похоже, полностью игнорируют пользовательские настройки. – RobG

ответ

1

Я думаю, что Pointy прибил его своим комментарием. toLocalDateString определенно имеет факторинг в DST с предполагаемым часом 00: 00: 0000, так как он не указывается, поэтому час возврата возвращается к предыдущему дню. Я не уверен, что ваш язык должен иметь это только через месяц, но я не профессионал по часовым поясам. Сценарий отлично работает для меня.

Обновление: установите «время» в вашей новой дате до середины дня, если это не то поведение, которое вы хотите. Тогда настройка перехода на летнее время не будет удаляться вперед и назад в разные даты.

var d = new Date(1993,i,3, 12,30,30,30); 
+0

Как изменяется изменение в DST на момент совершения изменения, изменяется между реализациями. Достаточно установить часы в любое время через один или несколько часов после полуночи, так как нигде не происходит изменения более часа (некоторые из них меньше), поэтому «новая дата (1993, i, 3,1)» должна быть достаточной , ;-) – RobG

0

Работает для меня с французским языком. Кажется, языковые настройки вашего браузера влияют на результаты странным образом. Проверьте настройки вашего браузера.

+0

Использование «Locale» в имени метода является неправильным. Методы * toLocaleString * полностью зависят от реализации и не учитывают «locale», иначе они будут изменять форматирование строки на основе географического местоположения устройства, а не пользовательских настроек (это то, что они на самом деле делают, если они вообще что-то используют). – RobG