JavaScript 日付の妥当性チェックをする
JavaScript
で日付の妥当性チェック・形式チェックを行います。他の言語でよくあるIsDate
のような汎用的なファンクションを作成します。
以下はyyyy/MM/dd
やyyyy-MM-dd
の形式の日付文字列のチェックを行っています。区切り文字があらかじめ決まっている場合は引数ではなくfunction
内に固定で定義しても問題ありません。
// str: 日付文字列(yyyy-MM-dd, yyyy/MM/dd)
// delim: 区切り文字("-", "/"など)
function isDate (str, delim) {
var arr = str.split(delim);
if (arr.length !== 3) return false;
const date = new Date(arr[0], arr[1] - 1, arr[2]);
if (arr[0] !== String(date.getFullYear()) || arr[1] !== ('0' + (date.getMonth() + 1)).slice(-2) || arr[2] !== ('0' + date.getDate()).slice(-2)) {
return false;
} else {
return true;
}
};
console.log(isDate('2017/01/02', '/')); // true
console.log(isDate('2017/1/2', '/')); // false
console.log(isDate('2017-03-04', '-')); // true
console.log(isDate('2017/02/31', '/')); // false
区切り文字のないyyyyMMdd
の形式の文字列チェックの場合は以下のようにします。最初に/
区切りの書式に変換してから上記function
と同様の処理を行います。
// str: 日付文字列(yyyyMMdd)
function isDate (str) {
var arr = (str.substr(0, 4) + '/' + str.substr(4, 2) + '/' + str.substr(6, 2)).split('/');
if (arr.length !== 3) return false;
const date = new Date(arr[0], arr[1] - 1, arr[2]);
if (arr[0] !== String(date.getFullYear()) || arr[1] !== ('0' + (date.getMonth() + 1)).slice(-2) || arr[2] !== ('0' + date.getDate()).slice(-2)) {
return false;
} else {
return true;
}
};
console.log(isDate('20170102')); // true
console.log(isDate('201712')); // false
console.log(isDate('20170304')); // true
console.log(isDate('20170231')); // false
HH:mm
書式の時刻のチェックについてはJavaScript 時刻の妥当性チェックをするで紹介しています。