2013-05-31 4 views
2

Я использую поле ввода типа HTML5 = поле даты и, поскольку некоторые браузеры по-прежнему не поддерживают эту функцию, я хотел бы создать сообщение об ошибке проверки для браузеров, отображающих только нормальное текстовое поле вместо поля даты. Это сообщение об ошибке должно выглядетьКак определить формат даты, определенный браузером?

Пожалуйста, введите дату в формате: ...

Но мне нужно найти правильный формат, что браузер установлен. Есть ли способ php/js/jQuery, как это узнать?

+0

Дата определяются ОС не браузер. Вы должны указать, какой формат они должны использовать, потому что я предполагаю, что вы сохраняете его в базе данных, так что это избавит вас от изменения ввода для вашего db. –

+0

. Я думаю, что это было задано до jimmy

+0

@jimmy Этот вопрос задает вопрос о календарном указателе HTML5; этот вопрос спрашивает о форматировании международных дат. – Blazemonger

ответ

1

Благодаря @Jose ответа Веги я смог найти очень простой способ, как сделать это.

 var now=new Date(2013,11,31); 
    var str=now.toLocaleDateString(); 
    str=str.replace("31","dd"); 
    str=str.replace("12","mm"); 
    str=str.replace("2013","yyyy"); 

Сообщение об ошибке:

"Пожалуйста, введите дату в формате:" форматы + ул

+0

Хотя, как [MDN docs] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects% 2FDate% 2FtoLocaleDateString # Пример: _Using_locales), не все используют те же цифры, что и западные нации, поэтому «2013» может вообще не отображаться в '.toLocaleDateString'. – Blazemonger

+0

@Blazemonger Это правда, но мне все равно нужны мои потребности. Во всяком случае, это полезно только для англоязычного ppl, потому что dd, mm и yyyy не будут иметь никакого смысла для других –

3

Я использовал библиотеку globalize, чтобы сделать что-то подобное. Я не знаю, имеет ли его функциональность то, что вы ищете, но я знаю, что он отлично справляется с разными культурами. Я использую window.navigator.userLanguage для определения культуры, а затем передаю ее в библиотеку глобализации, чтобы выполнить ее. У меня был успех при работе с валютой и цифрами.

EDIT: Смотрите, если это помогает:

var now=new Date(); 
alert(now.toLocaleString()); 

взяты из How format JavaScript Date with regard to the browser culture?

Reference Displaying proper date format depending on culture

+0

Thx, но нет ли более простого способа? Поскольку этот формат, очевидно, должен быть сохранен где-то в браузере. –

+1

. Вы не получите простой ответ на вопрос, который стал очень сложным. Как отметил @RyanB, форматы даты задаются операционной системой, а не браузером. Тем не менее, вы * можете * использовать ['.toLocaleDateString()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString?redirectlocale = en-US & redirectslug = JavaScript% 2FReference% 2FGlobal_Objects% 2FDate% 2FtoLocaleDateString) для вывода определенного объекта 'Date' в локальном формате. – Blazemonger

+0

Браузеры не ограничены тем, как они представляют ввод даты. Во время написания Chrome имеет самую обширную поддержку даты [3]. Он отображает выбор даты, используя формат локального календаря пользователя. Opera (v10.6 +) также отображает выбор даты, но показывает дату в формате проводов. Другие браузеры, такие как Firefox 20 и Internet Explorer 9/10, отображают текстовое поле ввода с форматом проводов. –

0

Почему бы не позволить пользователям вводить дату в любом формате, они любят.

E.g. Я турист в США, и браузер говорит мне использовать формат mm/dd/YYYY вместо моего родного dd.mm.YYYY.

Просто получить любую дату, введенные пользователями и разобрать его с Date.parse()

+0

Потому что тогда вы не можете быть уверены, что «1/5/13» означает 5 января или 1 мая. – Blazemonger

+0

Да, вы не можете. Но можете ли вы быть уверены в этом, если будете определять формат браузера? Формат dd/mm/YY отсутствует. Существует только mm/dd/YY. Если пользователь не захочет вводить правильную дату, вы не заставите его сделать это. – claustrofob

+0

@Blazemonger Это именно то, что я собирался сказать –

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