解析日期功能在某些日期不起作用

时间:2014-02-13 10:01:29

标签: javascript datetime

希望你能帮助我,我想弄清楚为什么我写的这个解析日期功能在2014年5月29日(可能还有其他日期)不起作用

function parseDate(dateString){
    //Accepts DD/MM/YYYY HH:MM
    var date = new Date(); 
    date.setDate    (parseInt(dateString.substr(0, 2), 10));
    date.setMonth   (parseInt(dateString.substr(3, 2), 10) - 1);
    date.setYear    (parseInt(dateString.substr(6, 4), 10));
    date.setHours   (parseInt(dateString.substr(11, 2), 10));
    date.setMinutes (0);
    date.setSeconds (0);
    date.setMilliseconds (0);
    return date;
}


$('#result').text(parseDate('29/05/2014 08:00'));
//Result Thu May 01 2014 08:00:00 GMT+1000 (EST)

这个小提琴的链接在这里:http://jsfiddle.net/2k4Ux/

它可能是一些愚蠢的东西,但我现在无法理解它。

2 个答案:

答案 0 :(得分:3)

您应该更改操作的顺序,例如:http://jsfiddle.net/maximgladkov/m6sUM/1/

function parseDate(dateString){
    //Accepts DD/MM/YYYY HH:MM
    var date = new Date(); 
    date.setYear    (parseInt(dateString.substr(6, 4), 10));
    date.setMonth   (parseInt(dateString.substr(3, 2), 10) - 1);
    date.setDate    (parseInt(dateString.substr(0, 2), 10));
    date.setHours   (parseInt(dateString.substr(11, 2), 10));
    date.setMinutes (0);
    date.setSeconds (0);
    date.setMilliseconds (0);

    return date;
}

$('#result').text(parseDate('29/05/2014 08:00'));

并非所有月份都超过28天,因此在您设置年份和月份之前,如果日期有效,则Date对象无法确定。

答案 1 :(得分:2)

你可以这样做:

function parseDate(dateString) {
    var parts = dateString.match(/\d+/g);
    return new Date(
        parts[2], parts[1] - 1, parts[0], // date
        parts[3], parts[4] // time
    );
}