Управление датами в Javascript без объекта Date

Похоже, я не могу использовать объект Date javascript, поскольку он по умолчанию использует даты США по умолчанию, когда вы инициализируете строку даты. Невозможно передать какую-либо информацию о культуре объекту даты.

т.е. Независимо от того, какие настройки локали клиента

var d = new Date("10.08.2009") всегда будет создавать объект даты, представляющий 10 августа 2009 г., а не 8 октября 2009 г., если языковым стандартом клиента была Великобритания.

Итак, учитывая, что мое требование состоит в том, чтобы иметь возможность легко добавлять/вычитать дни/месяцы/годы, есть ли умный способ сделать это легко без объекта Date

Все, что мне нужно сделать, это добавить день к дате (или строковое представление даты). поэтому, если мой код обнаружит, что настройки локали находятся в США, когда он увидит строку типа «08.10.2009», он изменит ее до «09.10.2009», но если бы он обнаружил, что это было в Великобритании, он бы знаю, что это строковое представление даты в Великобритании, и взломал его до «10.09.2009».


person user48408    schedule 08.10.2009    source источник


Ответы (4)


Для работы с датами и локализации в JavaScript я всегда рекомендую библиотеку DateJS.

Эта библиотека абстрагируется от использования объектов Date, имеет очень хорошие параметры локализации, мощный анализ и форматирование даты, а также имеет очень удобный API.

person Christian C. Salvadó    schedule 08.10.2009

Если вы знаете, что получаете ввод в формате дд/мм/гггг, вы можете легко установить правильную дату.

function britDay(D){
 D= D.match(/\d+/g);
 return new Date(+D[2], D[1]-1, +D[0]);
}

toLocaleDateString вернет дату в формате, ожидаемом пользователем.

Опора на пользовательский ввод, который подчиняется определенным правилам форматирования, оптимистична, поэтому большинство сайтов используют отдельные, помеченные поля ввода или выбирают поля для месяца, даты и года.

person kennebec    schedule 08.10.2009
comment
В том-то и дело, что я не знаю, как он будет отформатирован, потому что это будет зависеть от настроек локали. - person user48408; 09.10.2009
comment
Я бы назвал функцию internationalDay(), а не britDay(). Странный стиль даты используется только в США. - person TRiG; 23.06.2010
comment
Хороший звонок, но это такое длинное имя. Может быть, dmyDay() - person kennebec; 24.06.2010

Вы, наверное, знаете, что к дате легко добавить один день, просто добавьте к дате 86 400 * 1000 миллисекунд. Похоже, проблема заключается в отображении в вашем регионе; Date.toLocaleString() не подходит вам?

person Berry    schedule 08.10.2009
comment
Добавление 86400 * 1000 миллисекунд не удается дважды в год в местах, где используется летнее время. - person Paul Tomblin; 03.05.2010

dojo.date.locale.parse сможет анализировать отформатированную строку в соответствии с выбранной вами локалью. У него есть таблица культурных данных, основанная на unicode.org/cldr. Дополнительную информацию см. в этой статье.

person peller    schedule 11.12.2009