web-dev-qa-db-ja.com

Momentjs:「無効な日付」を防ぐ方法

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

_var fomattedDate = moment(myDate).format("L");
_

時々moment(myDate).format("L")が「無効な日付」を返します。それを防ぐ方法があり、代わりに空の文字列を返す方法があるかどうかを知りたいです。

19
R3tep

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つの非常に異なることが行われています。

最初:

_0000-00-00T00:00:00_ isは無効な日付です。 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_の例など)を使用する場合、コードは問題ありません。

第二:

_console.log(Object.prototype.toString.call(end_date));
_

有効な日付があっても[オブジェクト文字列]を返すため、私の場合は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は、1970年1月1日00:00:00 GMT以降の基本的なミリ秒数である日付をプリミティブ形式に強制し、日付に「無効な」日付がある場合、その数値含まれるのはNaNです。したがって、日付が無効な場合、isNaN(theDateObject)はtrueになります。

26
T.J. Crowder