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.
Ответы
Ответ 1
Если вы знаете шаблон, который используете:
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(""), то просто укажите культуру в культуре().
Я только что пробежал по этому сценарию несколько минут назад и нашел это решение, последнее, что это грязно, я надеюсь, что есть более чистый способ сделать это.
Примечание. Это применимо только к устаревшей версии Globalize 0.x.
Примечание 2. Передача жесткого кода НЕ рекомендация i18n.
Ответ 2
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
Ответ 3
Я бы посмотрел на 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
Если вы не укажете смещение часового пояса, разбор строки приведет к созданию даты в текущем часовом поясе пользователя.
Ответ 4
Принятый ответ означает, что все поля времени даты должны иметь полную дату и время. Однако более чем допустимо, что некоторые поля будут иметь только дату. Поэтому я изменил файл 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 в ближайшее время.
Этот ответ означает, что вы можете иметь дату со временем и просто поле даты вместе в одном проекте и на той же странице.