1. ホーム
  2. javascript

[解決済み] Momentjs : "Invalid date "を防ぐには?

2022-02-07 07:51:43

質問

私は次のコードを持っています。

var fomattedDate = moment(myDate).format("L");

時々 moment(myDate).format("L") は、"Invalid date"を返すので、それを防いで代わりに空の文字列を返す方法があれば知りたいのです。

解決方法は?

TL;DR

有効な日付があるかどうかを調べることが目的であれば、Momentの isValid :

var end_date_moment, end_date;
jsonNC.end_date = jsonNC.end_date.replace(" ", "T");
end_date_moment = moment(jsonNC.end_date);
end_date = end_date_moment.isValid() ? end_date_moment.format("L") : "";

...これは "" には end_date の文字列は、日付が無効である場合に使用されます。

詳細

ここには、2つの全く異なるものが存在します。

まず1つ目。

0000-00-00T00:00:00 は無効な日付です。1月(このフォーマットでは月1)より前の月はありませんし、月1日よりも前の日もありません。ですから 0000-00-00 は意味をなさない。

0000-01-01T00:00:00 は有効であり moment("0000-01-01T00:00:00").format("L") を返します。 "01/01/0000" を使用します。

もし、有効な日付(例えば、あなたの 2015-01-01T00:00:00 の例)、コードは問題ありません。

2つ目

console.log(Object.prototype.toString.call(end_date));

有効な日付でも[object String]が返されるので、私の場合はif条件が機能していません。

もちろん、そうです。 format は文字列を返しますが、あなたは format を取得するために end_date .

MomentJSのオブジェクトが無効な日付を持っているかどうかを知りたい場合は、このようにチェックすることができます。

if (theMomentObject.isValid()) {
    // It has as valid date
} else {
    // It doesn't
}

を知りたい場合は Date オブジェクトの日付が無効であることを示します。

if (!isNaN(theDateObject)) {
    // It has as valid date
} else {
    // It doesn't
}

...というのは isNaN は日付を原始的な形に強制します。それは、1月1日 1970 00:00:00 GMT からの基礎となるミリ秒の数で、日付が "invalid" であるとき、それが含む数は次のようになります。 NaN . そこで isNaN(theDateObject) は、日付が無効なときに真になります。