Globalize.js - как анализировать дату и время, а не просто дату
Globalize.js позволяет анализировать строку даты на основе текущей примененной культуры.
var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013
То, что я хотел бы сделать, это разобрать DateTime. Javascript Date объект обрабатывает это, я удивлен Globalize.js
Библиотека не.
var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013
var date = Globalize.parseDate("07/17/2013 11:55 pm"); //null
Я что-то пропустил? Я склоняюсь к анализу части времени сам. Есть ли другая библиотека, которая расширяет Globalize.js
что обеспечивает такую функциональность? Я посмотрел вокруг, но не нашел много.
ОБНОВЛЕНИЕ с принятым ответом
Вы можете проанализировать дату, если вы знаете формат, в котором находится дата.
var date = Globalize.parseDate("17/07/2013 11:55 pm", "MM/dd/yyyy hh:mm tt");
//date = null
В моем примере дата будет нулевой, поскольку ожидается, что период времени будет в формате a.m
или же p.m.
, Как только я изменил это, я смог разобрать дату и время.
var date = Globalize.parseDate("17/07/2013 11:55 p.m.", "MM/dd/yyyy hh:mm tt");
//date = Wed Jul 17 23:55:00 PDT 2013
Примечание. Это применимо только к устаревшей версии Globalize 0.x.
Примечание 2: Передача шаблона с жестким кодом НЕ является рекомендацией i18n.
4 ответа
Если вы знаете шаблон, который вы используете:
var date = Globalize.parseDate("07/17/2013 11:55 pm", "MM/dd/yyyy hh:mm tt");
Если вы не знаете шаблон:
var date = Globalize.parseDate("07/17/2013 11:55 pm", Globalize.culture().calendar.patterns.d + " " + Globalize.culture().calendar.patterns.t)
Строка выше предполагает текущую культуру, если она вам нужна для другой культуры или если вы не установили местную культуру, вызвав Globalize.culture(""), то просто укажите культуру для culture().
Я только что запустил этот сценарий несколько минут назад и нашел это решение, последнее из которых было грязным, я надеюсь, что есть более чистый способ сделать это.
Примечание. Это применимо только к устаревшей версии Globalize 0.x.
Примечание 2: Передача шаблона с жестким кодом НЕ является рекомендацией i18n.
Я бы посмотрел в moment.js, с этим можно сделать
d = moment("17/07/2013 11:55 pm" , "DD/MM/YYYY HH:mm a"); // parsed as 11:55pm local time
d = d.toDate(); //get it as a native js date object
Если вы не укажете смещение часового пояса, анализ строки создаст дату в часовом поясе текущего пользователя.
Globalize 1.x основан на CLDR и теперь имеет другой API. Следуйте новому коду, чтобы выполнить то, что вам нужно:
Globalize("en").parseDate("5/14/2015, 9:47 AM", {skeleton: "yMdhm"});
// > Thu May 14 2015 09:47:00 GMT-0300 (BRT)
Больше информации и примеров.
Больше информации о том, как загрузить CLDR.
Замечания о том, как использовать шаблоны CLDR
Принятый ответ означает, что во всех полях даты и времени должны быть указаны полная дата и время. Однако более чем приемлемо, что в некоторых полях будет только дата. Поэтому я изменил globalize.culture.en-AU.js, чтобы добавить свой собственный шаблон.
Globalize.addCultureInfo( "en-AU", "default", {
name: "en-AU",
englishName: "English (Australia)",
nativeName: "English (Australia)",
numberFormat: {
currency: {
pattern: ["-$n","$n"]
}
},
calendars: {
standard: {
firstDay: 1,
patterns: {
d: "d/MM/yyyy",
D: "dddd, d MMMM yyyy",
f: "dddd, d MMMM yyyy h:mm tt",
F: "dddd, d MMMM yyyy h:mm:ss tt",
M: "dd MMMM",
Y: "MMMM yyyy",
Z: "dd/MM/yyyy hh:mm:ss tt" // This is a custom one for our specifications.
}
}
}
});
Это не лучшее решение путем его изменения, но для моей и большинства других целей они не будут обновлять Globalization.js с версии 0.x до 1.x в ближайшее время.
Этот ответ означает, что вы можете иметь дату со временем и просто поле даты вместе в одном проекте и на одной странице.