Используйте JavaScript для разбора времени - PullRequest
9 голосов
/ 06 декабря 2009

Возможно, это что-то легкое, но я немного запутался, как это сделать. Как я могу, используя JavaScript, анализировать только время из следующей ISO 8601 строки даты:

 2009-12-06T17:10:00

Другими словами, со строкой выше, я хотел бы вывести:

5:10 PM

Любое руководство / учебники по этому вопросу было бы замечательно.

Ответы [ 4 ]

11 голосов
/ 01 июня 2011

Chrome & Firefox: стандартный конструктор даты JavaScript принимает строку даты ISO 8601. Например:

var sampleDate = new Date("2010-03-07T02:13:46Z");

Возвращает объект Date: «Sun Mar 07 2010 13:13:46 GMT + 1100 (AUS Eastern Daylight Time)»

Это не работает в IE (включая последнюю версию IE 9)

Вот кросс-браузерное решение Пола Соудена по адресу http://delete.me.uk/2005/03/iso8601.html:

Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    this.setTime(Number(time));
}

Использование:

var date = new Date();
date.setISO8601("2005-03-26T19:51:34Z");

Если вы выполняете много манипуляций с датой и временем в JavaScript, я также могу предложить проверить некоторые библиотеки JS, например MomentJS . Он обрабатывает некоторые общие вещи, такие как разбор дат, форматирование и вычисление различий между двумя датами и поддерживает несколько локализаций.

0 голосов
/ 06 декабря 2009

Это так называемый формат ISO 8601. Mochikit поставляется с функцией для его анализа,

http://mochikit.com/doc/html/MochiKit/DateTime.html

Вы можете получить объект Date, как этот,

  timestamp = isoTimestamp("2009-12-06T17:10:00");

Просто скопируйте функцию, если вы не хотите использовать Mochikit.

0 голосов
/ 10 декабря 2009

Анализировать временную метку ISO легко, сложно отформатировать время с учетом культурных особенностей (5:10 вечера не подходит для всех языков). Многие инструментарии предоставляют процедуры для части ISO, и это даже часть нового ECMAScript 5. стандарт; однако, только пара выполняет последнюю часть.

Вы можете попробовать dojo.date.stamp.fromISOString и dojo.date.locale.format .

Я считаю, что Date-JS может также форматировать время.

0 голосов
/ 06 декабря 2009

string.slice(11,16) вернет 17:10. Оттуда (возможно, используя slice в более интересных и захватывающих манерах) должно быть довольно просто перевести его в 24-часовой формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...