用JavaScript解析日期

时间:2018-06-25 08:58:40

标签: javascript regex date-parsing

首先,感谢您的帮助,社区很棒。 我在解析日期和时间时遇到问题。这是我的代码:

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是在其他地方定义的,采用日期时间选择器格式,这是我尝试解析的输入:

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 Feb 27 2016 16:22:10 GMT + 0200(CEST)。

您认为问题出在代码上还是与代码实施的设备如何处理有关?

谢谢

2 个答案:

答案 0 :(得分:0)

很抱歉在评论中回答。

这是您问题的一种解决方案:

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);

答案 1 :(得分:-1)

Date对象可以解析复杂的字符串。

邮件提供商通常会遵循RFC来说明应如何编写时间戳,从而允许其他编程语言大力支持它。

只需将您的字符串传递到date对象中,它将为您转换。


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

中进行了描述