【发布时间】:2015-03-11 17:14:35
【问题描述】:
我有以下代码:
var fomattedDate = moment(myDate).format("L");
有时moment(myDate).format("L") 返回“无效日期”,我想知道是否有办法防止这种情况并改为返回空字符串。
【问题讨论】:
标签: javascript momentjs invalidation
我有以下代码:
var fomattedDate = moment(myDate).format("L");
有时moment(myDate).format("L") 返回“无效日期”,我想知道是否有办法防止这种情况并改为返回空字符串。
【问题讨论】:
标签: javascript momentjs invalidation
如果您的目标是确定您是否有有效日期,请使用 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 是无效日期。一月之前没有月份(该格式中的第一个月),也没有第一天之前的一个月中的某一天。所以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 GMT 以来的基本毫秒数,并且当日期具有“无效”日期时,数字它包含NaN。所以当日期无效时isNaN(theDateObject) 为真。
【讨论】:
""会抛出错误,返回null是安全的。
"" 不会神奇地抛出错误。
jsonNC 是什么吗?
if(moment(value_).isValid()){ return moment(value_).format('MM/DD/YYYY'); } else { return moment(""); 那样做,并在遇到 else 声明时得到 NaN。知道我做错了什么吗?