JavaScript 检测有效日期

标签 javascript jquery date jquery-validate

Possible Duplicate:
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)

  • 2011 年 2 月 30 日
  • 2011 年 11 月 31 日

当天数超过总天数时检测无效日期的任何其他方法 一个月中的第几天?

更新:一个更大的问题是 jQuery 验证插件也没有将其检测为无效日期!

解决方案:

根据@Guffa 的评论,我创建了以下函数来验证日期:

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 对象,然后检查数据中的组成部分是否与解析的组成部分相同。如果您从超出范围的组件创建一个 Date 对象,这些值将流到下一个/上一个期间以创建一个有效日期。

例如,new Date(2011,0,42) 将创建一个包含日期 2/11/2011 而不是 1/42/2011 的对象。

通过解析组件而不是完整日期,您还可以解决不同日期格式的问题。例如,我的浏览器期望日期格式为 y-m-d 而不是 d/m/y

例子:

var text = '2/30/2011';
var comp = text.split('/');
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);
if (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d) {
  alert('Valid date');
} else {
  alert('Invalid date');
}

演示:http://jsfiddle.net/Guffa/UeQAK/

关于JavaScript 检测有效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098202/

相关文章:

javascript - 使用 ChartEditor 调整谷歌可视化的大小

javascript - 通过纯 JS 缩小图像尺寸会导致图像尺寸膨胀(以字节为单位)

javascript - 滚动 div 问题

php - php 获取日期差异

javascript - 改进javascript代码

javascript - Jquery 使 Rateit(星)插件适用于添加的元素

jquery - 离开悬停后完成 CSS 动画

javascript - 使用javascript从xml中删除子节点

javascript - 将 JavaScript 日期从一个时区转换为另一时区?

javascript - Javascript 中的日期比较和验证