Momentjs:如何防止"Invalid date"?

Momentjs : How to prevent "Invalid date"?

我有以下代码:

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

有时 moment(myDate).format("L") returns "Invalid date",我想知道是否有办法防止这种情况 return 一个空字符串。

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 字符串将使用 ""

详情

这里发生了两件截然不同的事情。

第一个:

0000-00-00T00:00:00 无效日期。一月之前没有月份(在该格式中是第 1 个月),也没有第 1 天之前的一个月中的一天。所以 0000-00-00 没有意义。

0000-01-01T00:00:00 将是有效的 — moment("0000-01-01T00:00:00").format("L") 很高兴 returns "01/01/0000"

如果您使用有效日期(例如您的 2015-01-01T00:00:00 示例),代码就可以。

第二个:

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

It returns [object String] even with a valid date, so the if condition doesn't working in my case.

当然可以:format returns 一个字符串,而您正在使用 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 以来的基本毫秒数,并且当日期具有 "invalid"日期,它包含的数字是NaN。所以 isNaN(theDateObject) 在日期无效时为真。