Разбор даты в JavaScript
Прежде всего, спасибо заранее за помощь, сообщество большое. У меня проблема с анализом даты и времени. Вот мой код:
var date = mail.bodyText.match(/\=\= date \=\=\s*(.*[^\s*])/);
if (date) {
var string1 = date[1].match(/^\d{4}\-\d{2}-\d{2}/);
var string2 = date[2].match(\s(\d{2}\:\d{2}\:\d{2}));
var string3 = date[3].match(\s(\+\d{4}));
var parts1 = string1.split("-");
var parts2 = string2.split(":");
if (parts1 && parts2)
{
var dt = new Date(parseInt(parts1[0], 10), parseInt(parts1[1], 10) - 1, parseInt(parts1[2], 10), parseInt(parts2[3], 10), parseInt(parts2[4], 10), parseInt(parts2[5], 10));
}
date_final = dt;
}
date_final
определяется в другом месте, в формате Date Time Picker, и здесь ввод, который я пытаюсь проанализировать:
blabla
== date ==
2016-02-13 16:22:10 +0200
blabla
Каждый раз, когда я выполняю код, у меня возникает проблема с анализом. Переменная date_final
не может обработать проанализированную дату Как вы думаете, чего не хватает в этом коде?
Обновить:
Вот что я вычеркнул. Для меня невозможно определить, что не так:
var date = mail.bodyText.match(/\=\= date \=\=\s*(.*[^\s*])/);
if (date) {
var initial = date[1];
var formated = initial.substring(0, 19);
var final = formated.replace(/-/g, '/');
var last = new Date(final);
Field = last;
logging += "{date=" + Field + "}";
}
Код на самом деле анализирует электронную почту и отправляет результат по SSL. Что меня больше всего удивляет, так это то, что в журналах по-прежнему публикуется следующий вывод даты, которую я добавляю к "проблеме разбора": дата = суббота, 27 февраля 2016 г. 16:22:10 GMT+0200 (CEST).
Как вы думаете, проблема в коде или может быть связана с тем, как устройство может обработать этот код?
Спасибо
Джейн
2 ответа
Извините за ответ в комментарии.
Вот одно из решений вашего вопроса:
var dateStr = '2016-02-13 16:22:10 +0200';
// get yyyy-MM-dd HH:mm:ss
var formatedStr = dateStr.substring(0, 19);
// get yyyy/MM/dd HH:mm:ss in case of working on most of the browsers
var finalStr = formatedStr.replace(/-/g, '/');
// Date object can easily parse the datetime string we formated above
var date = new Date(finalStr);
Date
Объект может анализировать сложные строки.
Почтовые провайдеры обычно следуют RFC
о том, как следует записывать метки времени, что позволяет другим языкам программирования активно его поддерживать.
Просто передайте свою строку в объект даты, и он преобразует ее для вас.
let mailStr = `blabla
== date ==
2016-02-13 16:22:10 +0200
blabla`;
let regex = mailStr.match(/\=\= date \=\=\s*(.*[^\s*])/);
let dt = new Date(regex[1]);
console.log(dt);
Выход описан в
ISO-8601