如何测试以2位数输入的日期,月份和年份是否有效?

时间:2014-07-03 06:55:58

标签: javascript jquery date

在我的表单中,用户可以输入如下日期:220875(日,月,年)。

一旦他们输入了详细信息,我想测试日期是否有效:

  1. 月份从1到12,包括在内。
  2. 输入的日期在指定月份有效。
  3. 如何判断值是否正确且匹配?

    这是我的尝试:(摘录)

    DateIsOk:function(value) { //220875 for example
            var formatValue = value.match(/.{1,2}/g), //splting as 22 08 75
             fieldDate = parseInt(formatValue[0]), //converting to num
             fieldMonth = parseInt(formatValue[1]),
             fieldYear = parseInt(formatValue[2]),
             dayobj = new Date();
    
            //test need to go here...
        }
    

    如果有帮助,这里是Live Demo

4 个答案:

答案 0 :(得分:1)

您似乎使用DD / MM / YYYY格式。

因此,您可以轻松使用此即用型代码:http://www.qodo.co.uk/blog/javascript-checking-if-a-date-is-valid/

<强>的JavaScript

// Checks a string to see if it in a valid date format
// of (D)D/(M)M/(YY)YY and returns true/false
function isValidDate(s) {
    // format D(D)/M(M)/(YY)YY
    var dateFormat = /^\d{1,4}[\.|\/|-]\d{1,2}[\.|\/|-]\d{1,4}$/;

    if (dateFormat.test(s)) {
        // remove any leading zeros from date values
        s = s.replace(/0*(\d*)/gi,"$1");
        var dateArray = s.split(/[\.|\/|-]/);

        // correct month value
        dateArray[1] = dateArray[1]-1;

        // correct year value
        if (dateArray[2].length<4) {
            // correct year value
            dateArray[2] = (parseInt(dateArray[2]) < 50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2]);
        }

        var testDate = new Date(dateArray[2], dateArray[1], dateArray[0]);
        if (testDate.getDate()!=dateArray[0] || testDate.getMonth()!=dateArray[1] || testDate.getFullYear()!=dateArray[2]) {
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }
}

答案 1 :(得分:1)

如果您不介意将momentjs 用作@hVostt建议,您可以尝试修改DateIsOk()验证功能,如下所示:

...
dateParts : ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"],
DateIsOk:function(value) {        
    var dayobj = moment(value, "DDMMYY");

    if (dayobj.isValid()) {
        this.errorHandler(true);
        return true;
    }
    else {
        this.errorHandler('Invalid ' + this.dateParts[dayobj.invalidAt()]);
        return false;
    }
}
...

这是更新后的Live Demo

答案 2 :(得分:0)

js正则表达可能就像这样 /([0-2][0-9]|3[01])(0[1-9]|1[0-2])(\d{2})/

答案 3 :(得分:0)

请尝试Moment.js及其验证功能:

http://momentjs.com/docs/#/parsing/is-valid/

moment([2014, 25, 35]).isValid();

moment("2014-25-35").isValid();