Javascript日期允许无效数据(例如2月30日)

Dom*_*nik 5 javascript date

如何验证日期?我的意思不是格式,而是逻辑.例如:2月30日不是有效日期.

var date = new Date("2015-02-29T13:02:49.073Z"); // 2015 Feb 29th does not exist
console.log(date.toISOString());
Run Code Online (Sandbox Code Playgroud)

返回2015-03-01T13:02:49.073Z(3月1日).

但我想要一个这个日期(输入)无效的信息.

编辑:在Chrome中测试过.Firefox返回"无效日期".但不是解析.只有在使用日期时(例如toISOString())才会抛出异常.

try
{
  var date = new Date("2015-02-29T13:02:49.073Z");
  console.log(date.toISOString());
}
catch(e)
{
    console.log("error: " + e.message);
}
Run Code Online (Sandbox Code Playgroud)

火狐:

失效日期

铬:

(没有,只是切换到下一个日期.)

摘要:它取决于浏览器.所以,不推荐使用.

jsfiddle的例子

Key*_*ana 5

我使用此函数来检查日期是否有效:

function isValidDate(year, month, day) {
    month = month - 1;
    var d = new Date(year, month, day);
    if (d.getFullYear() == year && d.getMonth() == month && d.getDate() == day) {
      return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Jan*_*Jan 4

我能想到的最简单的事情是将解析的日期转换为 ISO 字符串并将其与原始输入进行比较:

var input = "2015-02-29T13:02:49.073Z"
var date = new Date(input);
var isValid = (input === date.toISOString());
Run Code Online (Sandbox Code Playgroud)