2009-10-08 7 views
1

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

I.e. Независимо от того, каковы настройки локального клиента:

var d = new Дата («08/10/2009») всегда будет создавать объект даты, представляющий 10 августа 2009 года, а не 8 октября 2009 года, если локалью клиентов была Великобритания ,

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

Все, что нужно сделать, это добавить в день дата (или строковое представление даты). поэтому, если мой код обнаруживает, что настройки локали находятся в США, когда он видит строку типа «10/08/2009», она удаляет ее до «10/09/2009», но если она обнаружила, что она была в Великобритании, она знали это uk строковое представление даты и взломали его до «09/10/2009»

ответ

3

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

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

0

Нужно ли вам объявлять свою дату таким образом? Вы можете предоставить несколько различных строк функции Date(), чтобы быть более конкретными.

Примеры:

var d1 = new Date('January 1, 1970'); // Date as a parse 
var d2 = new Date(0);     // Date as a julian number 
var d3 = new Date(1970, 0, 1);  // Date as arguments 

http://www.hunlock.com/blogs/Javascript_Dates-The_Complete_Reference

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

* Редактировать - добавлен после просмотра комментария. *

Жаль, что это не сработает. Я действительно хочу помочь здесь, но на данный момент у меня нет информации.

ОК .. Итак, вот следующий глупый вопрос, который у меня есть. Если это текстовое поле только для чтения, данные в текстовом поле имеют откуда-то приходить ... Либо база данных, либо какая-то размещенная форма, и т. д. Может ли это быть обработано на стороне сервера? Либо отформатируйте дату до ее вывода, либо проанализируйте ее с помощью кода на стороне сервера после ее отправки?

Я не уверен, какие инструменты вы используете, но должно быть решение. Вы можете быть правы, однако, чтобы не было способа сделать это в JavaScript. Было бы очень полезно, если бы у вас также был способ определить время и культуру, поэтому у вас будет начальная точка с работой над определением формата, в котором находится строка даты.

+0

Должен использовать описанный мной способ. Его текстовое поле readonly. Я читаю строку даты с – user48408

0

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

+0

. Добавление «86400 * 1000 миллисекунд» происходит дважды в год в местах, где используется летнее время. –

0

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

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

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

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

+0

То, что я не знаю, каким образом он будет отформатирован, потому что он будет зависеть от того, какие настройки языка установлены – user48408

+0

Я бы назвал функцию 'internationalDay()' not 'britDay()'. Только США используют странный стиль даты. – TRiG

+0

Хороший звонок, но это такое длинное имя. Возможно, dmyDay() – kennebec

0

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

Смежные вопросы