我有以下代码:
var fomattedDate = moment(myDate).format("L");
有时moment(myDate).format("L")
会返回“无效日期”,我想知道是否有办法防止这种情况并改为返回空字符串。
答案 0 :(得分:24)
如果您的目标是确定您是否有有效日期,请使用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个月),也不是第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));
即使有效日期,它也会返回[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
会将日期强制转换为原始形式,这是自格林威治标准时间1970年1月1日00:00:00以来的基础毫秒数,当日期具有“无效”日期时,它包含的数字是NaN
。因此,当日期无效时isNaN(theDateObject)
为真。