21

これは初心者の質問です:

"YYYYmmdd"外部ライブラリなしで日付を形式で解析する方法は? 入力文字列がこの形式でない場合は、取得したいと思いますinvalid Date(または、簡単な場合は未定義)。

4

6 に答える 6

36
function parse(str) {
    if(!/^(\d){8}$/.test(str)) return "invalid date";
    var y = str.substr(0,4),
        m = str.substr(4,2),
        d = str.substr(6,2);
    return new Date(y,m,d);
}

使用法:

parse('20120401');

アップデート:

ロケットが言ったように、月は js では 0 ベースです...文字列で月が 0 ベースでない場合はこれを使用します

function parse(str) {
    if(!/^(\d){8}$/.test(str)) return "invalid date";
    var y = str.substr(0,4),
        m = str.substr(4,2) - 1,
        d = str.substr(6,2);
    return new Date(y,m,d);
}

アップデート:

日付の有効性をより厳密にチェックします。日付を検証するために HBP の方法を採用しました。

function parse(str) {
    var y = str.substr(0,4),
        m = str.substr(4,2) - 1,
        d = str.substr(6,2);
    var D = new Date(y,m,d);
    return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : 'invalid date';
}
于 2012-05-17T15:22:20.567 に答える
5

数値を検証するより堅牢なバージョン:

 function parse (str) {
        // validate year as 4 digits, month as 01-12, and day as 01-31 
        if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$/))) {
           // make a date
           str[0] = new Date (+str[1], +str[2] - 1, +str[3]);
           // check if month stayed the same (ie that day number is valid)
           if (str[0].getMonth () === +str[2] - 1)
              return str[0];
        }
        return undefined;
 }

フィドルを参照してください: http://jsfiddle.net/jstoolsmith/zJ7dM/

私は最近、ここで見つけることができるはるかに機能的なバージョンを書きました: http://jsfiddle.net/jstoolsmith/Db3JM/

于 2012-05-17T15:45:24.570 に答える
0

HBPの回答とこの回答を組み合わせて、YYYYMMDDHHmmを解析する関数を取得します。ここにフィドルがあります

var parseTS=function(str){
                // validate year as 4 digits, month as 01-12, and day as 01-31
                if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])([0-5]\d)$/))) {
                    // make a date
                    str[0] = new Date (+str[1], +str[2] - 1, +str[3], +str[4], +str[5]);
                    // check if month stayed the same (ie that day number is valid)
                    if (str[0].getMonth () === +str[2] - 1) {
                        return str[0];
                    }
                }
                return undefined;
            };

    console.log(parseTS('201501012645'));
于 2015-03-05T09:35:13.677 に答える