Разбор даты в JavaScript - PullRequest
0 голосов
/ 25 июня 2018

Прежде всего, спасибо за помощь, сообщество большое. У меня проблема с анализом даты и времени. Вот мой код:

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. Что меня больше всего удивляет, так это то, что в журналах публикуется следующий вывод даты, которую я добавил к «проблеме разбора»: date = Sat 27 фев 2016 16:22:10 GMT + 0200 (CEST).

Считаете ли вы, что проблема связана с кодом или может быть связана с тем, как устройство может обработать этот код?

Спасибо

Jane

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Извините за ответ в комментарии.

Вот одно из решений вашего вопроса:

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);
0 голосов
/ 25 июня 2018

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
...