js验证日期

  寻寻觅觅,Web开发里,对日期的验证太多了,网上好多是用正则表达式来验证,但是这种验证也只能验证格式,没办法验证有效性,比如平年(2月28天)和闰年(2月29天)。平时用得多,以前经常用一次写一次,腻了,所以今天写下来,以后直接Copy,今天提供两个方法:

1.用纯Js代码来验证

这个要注意的也就是对2月份的判断,就是加个Switch...Case而已,就不一一解释,代码中有注释,

这个方法满足以下格式的日期:20100912、2010-01-02、2012/2/2、2012\12\12

先上完整代码(需要的朋友直接复制):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="jquery-1.10.2.js"></script>
    <script type="text/javascript">
        function btnClick()
        {
            if (!checkDate(document.getElementById("inputDate")))
            {
                alert("日期格式错误");
            }
            else
                alert("验证通过");
        }

        function checkDate(element)//讀取分隔符,日期輸入框的對象
        {
            var strDate = $(element).val();
            var splitStr = "";
            if (!checkInt(strDate)) {
                for (var i = 0; i < strDate.length; i++) {
                    if (!checkInt(strDate[i])) {
                        splitStr = strDate[i];
                        if (splitStr != "-" || splitStr != "/" || splitStr != "\\")//默认只能有这几种分隔符(因为目前后台代码能转化时间的也就这三种好像                                                  ),需要的自己加
                        {
                            return false;
                        }
                        break;
                    }
                }
            }
            else//如果是數字,則沒有分隔符,則默認格式為20121011
            {
                if (strDate.length != 8)
                {
                    return false;
                }

                splitStr = "/";
                var s1 = strDate.substring(0, 4) + splitStr;
                var s2 = strDate.substring(4, 6) + splitStr;
                var s3 = strDate.substring(6, 8);
                strDate = s1 + s2 + s3;
            }
            $(element).val(strDate);//如果沒有分隔符,把分隔符插入之後,賦值給文本框,類似於格式化日期
            return validateDate(strDate, splitStr);
        }

        function validateDate(strDate, splitStr) {
            splitStr = splitStr.trim();
            var year;
            var month;
            var day;

            if (splitStr == "") {
                if (strDate.length != 8) {
                    //日期格式不正確,請輸入六位日期yyyyMMdd
                    return false;//字符串輸入不正確,如果分隔符為空,則格式類似于20140310,所以如果字符串長度不等於6,視為錯誤字符串
                }
                else {
                    year = strDate.substring(0, 4);
                    month = strDate.substring(4, 6);
                    day = strDate.substring(6, 8);
                    if (!checkInt(year) || !checkInt(month) || !checkInt(day)) {
                        return false;//輸入了非數字
                    }
                    return checkYear(year, month, day);
                }
            }
            else {
                var arr = strDate.split(splitStr);
                if (arr.length != 3) {
                    return false;//不等於三個數字,則分隔符有問題,或者數字有問題;
                }
                else {
                    year = arr[0];
                    month = arr[1];
                    day = arr[2];
                    if (!checkInt(year) || !checkInt(month) || !checkInt(day)) {
                        return false;//輸入了非數字
                    }
                    return checkYear(year, month, day);
                }
            }
        }
        function checkInt(num) {//验证是否是纯数字
            var reg = /^-?\d+$/;//对正则表达式不熟,知道的朋友帮忙解释下"-?"的意思
            if (reg.test(num)) {
                return true;
            }
            else {
                return false;
            }
        }
        function checkYear(year, month, day) {//验证平年闰年
            var result = true;
            year = parseInt(year);
            month = parseInt(month);
            day = parseInt(day);

            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)//閏年,2月  29天
            {
                switch (month) {
                    case 1: result = (day <= 31); break;
                    case 3: result = (day <= 31); break;
                    case 5: result = (day <= 31); break;
                    case 7: result = (day <= 31); break;
                    case 8: result = (day <= 31); break;
                    case 10: result = (day <= 31); break;
                    case 12: result = (day <= 31); break;
                    case 4: result = (day <= 30); break;
                    case 6: result = (day <= 30); break;
                    case 9: result = (day <= 30); break;
                    case 11: result = (day <= 30); break;
                    case 2: result = (day <= 29); break;
                    default: result = false;
                }
            }
            else//平年,2月  28天
            {
                switch (month) {
                    case 1: result = (day <= 31); break;
                    case 3: result = (day <= 31); break;
                    case 5: result = (day <= 31); break;
                    case 7: result = (day <= 31); break;
                    case 8: result = (day <= 31); break;
                    case 10: result = (day <= 31); break;
                    case 12: result = (day <= 31); break;
                    case 4: result = (day <= 30); break;
                    case 6: result = (day <= 30); break;
                    case 9: result = (day <= 30); break;
                    case 11: result = (day <= 30); break;
                    case 2: result = (day <= 28); break;
                    default: result = false;
                }
            }
            return result;
        }
    </script>
</head>
<body>
    <input type="text" id="inputDate" />
    <input type="button" onclick="btnClick()" value="验证" />
</body>
</html>

2.将日期字符串转为Date类型

精华只有一句,但是不能支持20141024这种格式,所以如果是输入这种格式,那就给它处理一下,先上精华代码:

return (new Date(strDate).getDate() == strDate.substring(strDate.length - 2));

有了这句,能判断2010-01-02、2012/2/2、2012\12\12这三种格式的日期,缺点就是不能判断20100912这种类型,所以以下对20100912这种类型的数据进行处理,也能用了。

这句啥意思我也不懂,不过能用就是了。

给出能支持20100912、2010-01-02、2012/2/2、2012\12\12这四种格式的代码:

<script type="text/javascript">

        function checkDate2(element)//讀取分隔符,日期輸入框的javascript對象
        {
            var strDate = $(element).val();
            var splitStr = "";
            if (!checkInt(strDate)) {
                for (var i = 0; i < strDate.length; i++) {
                    if (!checkInt(strDate[i])) {
                        splitStr = strDate[i];
                        if (splitStr != "-" || splitStr != "/" || splitStr != "\\") {
                            return false;
                        }
                        break;
                    }
                }
            }
            else//如果是數字,則沒有分隔符,則默認格式為20121011
            {
                if (strDate.length != 8) {
                    return false;
                }

                splitStr = "/";
                var s1 = strDate.substring(0, 4) + splitStr;
                var s2 = strDate.substring(4, 6) + splitStr;
                var s3 = strDate.substring(6, 8);
                strDate = s1 + s2 + s3;
                $(element).val(strDate);//如果沒有分隔符,把分隔符插入之後,賦值給文本框,類似於格式化日期
            }
            return (new Date(strDate).getDate() == strDate.substring(strDate.length - 2));//精华一句
        }
    </script>

  

总结:

第二个简洁一点,不过都是可用的。记录下来,以后直接复制黏贴(ˇ?ˇ) ,不知道有没有漏掉什么,欢迎批斗

        
时间: 2024-10-07 05:11:39

js验证日期的相关文章

js验证两个日期是否是同一个年月,并计算天数差

/*** 将日期转化为 yyyy-MM 格式 .* 帮助验证 两个时间要在同一个年月份* @param dateStr*/function formatYearMonth(b_date){    var b_date_year = b_date.getYear();    var b_date_month = b_date.getMonth()+1; if(b_date_month < 10){        b_date_month = "0" + b_date_month ;

js 验证 网址 邮箱等

//判断是否是一个网址<script language="javascript">function checkuserinfo(){var homepage=userinfo.homepage.value;if(homepage==""){alert("请输入个人主页地址!");document.userinfo.homepage.focus();}else{if(!checkeURL(homepage)){alert("您

正则表达式的JS验证

/判断输入内容是否为空    function IsNull(){        var str = document.getElementById('str').value.trim();        if(str.length==0){            alert('对不起,文本框不能为空或者为空格!');//请将"文本框"改成你需要验证的属性名称!        }    }       //判断日期类型是否为YYYY-MM-DD格式的类型    function IsD

常用JS验证函数总结

JS验证Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/** * 2010-7-13 * 贺 臣 * 情 缘 * js各种表单数据验证 */ /**************************************************************************************/ /**************

js验证表单大全1

不错的JS验证~~~~~~~~~~~~~~~~~~~~~~~~~ 用途:校验ip地址的格式 输入:strIP:ip地址 返回:如果通过验证返回true,否则返回false: */ function isIP(strIP) { if (isNull(strIP)) return false; var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正则表达式 if(re.test(strIP)) { if( RegExp.$1 <256 && R

js Date 日期格式化(转)

var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1970-????)myDate.getMonth();       //获取当前月份(0-11,0代表1月)myDate.getDate();        //获取当前日(1-31)myDate.getDay();         //获取当前星期X(0-6,0代表星期天)myDate.getTi

js验证表单大全

js验证表单大全1. 长度限制<script>function test() {if(document.a.b.value.length>50){alert("不能超过50个字符!");document.a.b.focus();return false;}}</script><form name=a onsubmit="return test()"><textarea name="b" cols=&

常用JS验证和函数

下面是我常用一些JS验证和函数,有一些验证我直接写到了对象的属性里面了,可以直接通过对象.方法来调用 //浮点数除法运算 function fdiv(a, b, n) { if (n == undefined) { n = 2; } var t1 = 0, t2 = 0, r1, r2; try { t1 = a.toString().split(".")[1].length } catch (e) { } try { t2 = b.toString().split(".&q

Js获取日期时间及其它操作

var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1970-????)myDate.getMonth();       //获取当前月份(0-11,0代表1月)myDate.getDate();        //获取当前日(1-31)myDate.getDay();         //获取当前星期X(0-6,0代表星期天)myDate.getTi