代码之家  ›  专栏  ›  技术社区  ›  R3tep

Momentjs:如何防止“无效日期”?

  •  26
  • R3tep  · 技术社区  · 11 年前

    我有以下代码:

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

    有时 moment(myDate).format("L") 返回“无效日期”,我想知道是否有防止这种情况的方法,而是返回一个空字符串。

    1 回复  |  直到 11 年前
        1
  •  38
  •   T.J. Crowder    11 年前

    TL;博士

    如果你的目标是确定你是否有一个有效的日期,请使用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") 高兴地回来了 "01/01/0000" 对于它。

    如果您使用有效日期(例如 2015-01-01T00:00:00 示例),代码很好。

    第二:

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

    即使有有效日期,它也会返回[objectString],因此if条件在我的情况下不起作用。

    当然了: format 返回字符串,然后使用 总体安排 得到 结束日期(_D) .

    如果您想知道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。

    推荐文章