How can I determine whether a given string represents a date?

后端 未结 11 1646
一个人的身影
一个人的身影 2020-12-11 00:31

Is there an isDate function in jQuery?

It should return true if the input is a date, and false otherwise.

11条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-11 01:15

    If you don't want to use the jquery plugin I found the function at:

    http://www.codetoad.com/forum/17_10053.asp

    Works for me. The others I found don't work so well.

    UPDATED:

    From the cached version of the page at: http://web.archive.org/web/20120228171226/http://www.codetoad.com/forum/17_10053.asp

    // ******************************************************************
    // This function accepts a string variable and verifies if it is a
    // proper date or not. It validates format matching either
    // mm-dd-yyyy or mm/dd/yyyy. Then it checks to make sure the month
    // has the proper number of days, based on which month it is.
    
    // The function returns true if a valid date, false if not.
    // ******************************************************************
    
    function isDate(dateStr) {
    
        var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
        var matchArray = dateStr.match(datePat); // is the format ok?
    
        if (matchArray == null) {
            alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
            return false;
        }
    
        month = matchArray[1]; // p@rse date into variables
        day = matchArray[3];
        year = matchArray[5];
    
        if (month < 1 || month > 12) { // check month range
            alert("Month must be between 1 and 12.");
            return false;
        }
    
        if (day < 1 || day > 31) {
            alert("Day must be between 1 and 31.");
            return false;
        }
    
        if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
            alert("Month " + month + " doesn`t have 31 days!")
            return false;
        }
    
        if (month == 2) { // check for february 29th
            var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
            if (day > 29 || (day == 29 && !isleap)) {
                alert("February " + year + " doesn`t have " + day + " days!");
                return false;
            }
        }
        return true; // date is valid
    }

提交回复
热议问题