JavaScript:Dateオブジェクトへ TryParse する関数
January 26, 2022
日付を表す文字列があるとして、可能ならばこれを Date オブジェクトに変換したい、というような時に使える関数です。
JavaScript 版 #
/** 引数を Date オブジェクトへ変換する。Date として解釈できなかった場合は引数をそのまま返す。 */
const tryParseToDate = (arg) => {
if (arg instanceof Date) {
return arg;
}
if (typeof arg !== 'string' && typeof arg !== 'number') {
return arg;
}
const maybeDate = new Date(arg);
const invalidDate = Number.isNaN(maybeDate.getTime());
return invalidDate ? arg : maybeDate;
};
TypeScript 版 #
引数の型から Date 変換できないと判断できるものは先に弾くのか、それとも JavaScript 版のようにとりあえず全ての引数を受け付けるのか、どのように使いたいかにより、2パターンに分けられます。
引数の型をチェックするバージョン #
const tryParseToDate = <T extends ConstructorParameters<typeof Date>[number]>(arg: T) => {
const maybeDate = new Date(arg);
const invalidDate = Number.isNaN(maybeDate.getTime());
return invalidDate ? arg : maybeDate;
};
全ての引数を受け付けるバージョン #
const tryParseToDate = <T>(arg: T) => {
if (arg instanceof Date) {
return arg;
}
if (typeof arg !== 'string' && typeof arg !== 'number') {
return arg;
}
const maybeDate = new Date(arg);
const invalidDate = Number.isNaN(maybeDate.getTime());
return invalidDate ? arg : maybeDate;
};