【发布时间】:2011-11-11 18:16:09
【问题描述】:
可能重复:
Detecting an “invalid date” Date instance in JavaScript
我使用以下方法检测有效日期:
var text = $('#Date').val();
var date = Date.parse(text);
if (isNaN(date)) {
// Invalid date
}
但发现 Date.parse 认为以下是有效日期(mm/dd/yyyy)
- 2/30/2011
- 2011 年 11 月 31 日
当天数超过总天数时检测无效日期的任何其他方式 一个月有几天?
更新:一个更大的问题是 jQuery 验证插件也没有将其检测为无效日期!
解决方案:
基于@Guffa 的 cmets,我创建了以下函数来验证日期:
function validDate(text) {
var date = Date.parse(text);
if (isNaN(date)) {
return false;
}
var comp = text.split('/');
if (comp.length !== 3) {
return false;
}
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var date = new Date(y, m - 1, d);
return (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d);
}
【问题讨论】:
-
Date.parse 不认为它们是正确的,但它会为您将它们转换为正确的日期。例如。
2/30/2011将以03/02/2011结尾 -
在投票结束后,我意识到提供的问题不相同,尽管它是相关的。
-
因为我需要支持多种语言环境的输入,所以我们实现了自己的日期解析器。我们发现检测此错误的唯一方法是将我们解析的月份字符串与生成的日期中的月份进行比较
-
像momentjs.com/docs/#/parsing/is-valid那样简单地使用moment.js
标签: javascript jquery date jquery-validate