これは初心者の質問です:
"YYYYmmdd"
外部ライブラリなしで日付を形式で解析する方法は? 入力文字列がこの形式でない場合は、取得したいと思いますinvalid Date
(または、簡単な場合は未定義)。
これは初心者の質問です:
"YYYYmmdd"
外部ライブラリなしで日付を形式で解析する方法は? 入力文字列がこの形式でない場合は、取得したいと思いますinvalid Date
(または、簡単な場合は未定義)。
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';
}
数値を検証するより堅牢なバージョン:
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/
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'));