Разбор даты в 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

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