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 в ближайшее время.

Этот ответ означает, что вы можете иметь дату со временем и просто поле даты вместе в одном проекте и на одной странице.

Другие вопросы по тегам