职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 436|回复: 1

JS简单日期比较

[复制链接]
gz-vps 发表于 2011-8-21 10:46 | 显示全部楼层 |阅读模式
纯属练习,只能实现简......
如果只是单纯的比较某......


纯属练习,只能实现简单的日期比较,不足之处欢迎各路高手指出。欢迎贴代码。
Javascript代码  
var LESSTHEN = 0;   
var EQUALS = 1;   
var GREATERTHEN = 2;   
var ERROR = 3;   
/**  
* 校验输入内容为合法日期  
* @param {String} str 日期字符串  
* @return {Boolean} true:日期符合格式yyyy-MM-dd或yyyy/MM/dd false:日期不符合格式yyyy-MM-dd或yyyy/MM/dd  
*/  
function isValidDate(str){   
      
    var checkStr = str;   
    var reg = "/";   
    checkStr = checkStr.replace(/-/g,reg)   
    var m = checkStr.length;   
    var year;   
    var month;   
    var day;   
  
    if(!(checkStr == null || checkStr=="" ))   
    {   
        if(m == 10 && checkStr.charAt(4) == reg && checkStr.charAt(7) == reg)   
        {   
            year = parseInt(checkStr.split(reg)[0],10);   
            month = parseInt(checkStr.split(reg)[1],10);   
            day = parseInt(checkStr.split(reg)[2],10);   
            if(month > 12 || month == 0){   
                alert(checkStr + "的格式不符,要求月份在1-12之间!");   
                return false;   
            }   
            if(day > 31 || day ==0)   
            {   
                alert(checkStr + "的格式不符,要求日在1-31之间!");   
                return false;   
            }   
            else if((month == 2 || month == 4 || month ==6 || month ==9 || month ==11) && day == 31)   
            {   
                alert(checkStr + "的格式不符," + month + "月无31日!");   
                return false;   
            }   
            else if(month == 2  && day == 30)   
            {   
                alert(checkStr + "的格式不符,"+year+"月" +month+"月无30日!");   
                return false;   
            }   
            else if((year%100==0)&&(year%400!=0) && month == 2  && day == 29)   
            {   
                alert(checkStr + "的格式不符,"+year+"月" +month+"月无29日!");   
                return false;   
            }   
            else if((year%4)!=0 && month == 2  && day == 29)   
            {   
                alert(checkStr + "的格式不符,"+year+"月" +month+"月无29日!");   
                return false;   
            }   
        }   
        else  
        {   
            alert(checkStr + "的格式不符,要求yyyy-MM-dd或yyyy/MM/dd!");   
            return false;   
        }   
    }   
    return true;   
}   
  
/**  
* 日期比较  
* @param {Date} d1 日期1  
* @param {Date} d2 日期2  
* @return {Number} 0:小于 1:等于 2:大于 3 错误  
*/  
function dateCompare(d1,d2)   
{      
    //如果比较的不是日期,直接返回false   
    if(!(d1 instanceof Date) || !(d2 instanceof Date))   
    {   
        return ERROR;   
    }   
  
    var d1Year = d1.getFullYear();   
    var d2Year = d2.getFullYear();   
    var d1Month = d1.getMonth();   
    var d2Month = d2.getMonth();   
    var d1Date = d1.getDate();   
    var d2Date = d2.getDate();   
  
    //比较年   
    if (d1Year < d2Year)   
    {   
        return LESSTHEN;   
    }   
      
    //如果年相等,比较月   
    if (d1Year == d2Year)   
    {      
        if (d1Month < d2Month)   
        {   
            return LESSTHEN;   
        }   
    }   
    //如果年,月都相等,比较日   
    if (d1Year == d2Year)   
    {      
        if(d1Month == d2Month)   
        {   
            if (d1Date < d2Date)   
            {   
                return LESSTHEN;   
            }   
           
            else if (d1Date == d2Date)   
            {   
                return EQUALS;   
            }   
            else  
            {   
                return GREATERTHEN;   
            }   
        }   
        else  
        {   
           return GREATERTHEN;   
        }   
    }   
    else  
    {   
       return GREATERTHEN;   
    }   
      
}   
  
/**  
* 日期比较  
* @param {String} d1 日期1 格式为:yyyy-MM-dd或yyyy/MM/dd  
* @param {String} d2 日期2 格式为:yyyy-MM-dd或yyyy/MM/dd  
* @return {Number} 0:小于 1:等于 2:大于 3 错误  
*/  
function dateCompareStr(d1,d2)   
{   var reg = "/";   
    if(isValidDate(d1)&&isValidDate(d2))   
    {   
        d1 = new Date(Date.parse(d1.replace(/-/g,reg)));   
        d2 = new Date(Date.parse(d2.replace(/-/g,reg)));   
      
        return dateCompare(d1,d2);   
    }   
    else  
    {      
        return ERROR;   
    }   
      
}  

var LESSTHEN = 0;
var EQUALS = 1;
var GREATERTHEN = 2;
var ERROR = 3;
/**
* 校验输入内容为合法日期
* @param {String} str 日期字符串
* @return {Boolean} true:日期符合格式yyyy-MM-dd或yyyy/MM/dd false:日期不符合格式yyyy-MM-dd或yyyy/MM/dd
*/
function isValidDate(str){
   
        var checkStr = str;
        var reg = "/";
        checkStr = checkStr.replace(/-/g,reg)
    var m = checkStr.length;
    var year;
    var month;
    var day;

    if(!(checkStr == null || checkStr=="" ))
    {
        if(m == 10 && checkStr.charAt(4) == reg && checkStr.charAt(7) == reg)
        {
            year = parseInt(checkStr.split(reg)[0],10);
            month = parseInt(checkStr.split(reg)[1],10);
            day = parseInt(checkStr.split(reg)[2],10);
                        if(month > 12 || month == 0){
                    alert(checkStr + "的格式不符,要求月份在1-12之间!");
                return false;
            }
            if(day > 31 || day ==0)
            {
                alert(checkStr + "的格式不符,要求日在1-31之间!");
                return false;
            }
            else if((month == 2 || month == 4 || month ==6 || month ==9 || month ==11) && day == 31)
            {
                alert(checkStr + "的格式不符," + month + "月无31日!");
                                return false;
            }
            else if(month == 2  && day == 30)
            {
                    alert(checkStr + "的格式不符,"+year+"月" +month+"月无30日!");
                return false;
            }
            else if((year%100==0)&&(year%400!=0) && month == 2  && day == 29)
            {
                alert(checkStr + "的格式不符,"+year+"月" +month+"月无29日!");
                return false;
            }
            else if((year%4)!=0 && month == 2  && day == 29)
            {
                alert(checkStr + "的格式不符,"+year+"月" +month+"月无29日!");
                return false;
            }
        }
        else
        {
            alert(checkStr + "的格式不符,要求yyyy-MM-dd或yyyy/MM/dd!");
            return false;
        }
    }
    return true;
}

/**
* 日期比较
* @param {Date} d1 日期1
* @param {Date} d2 日期2
* @return {Number} 0:小于 1:等于 2:大于 3 错误
*/
function dateCompare(d1,d2)
{   
    //如果比较的不是日期,直接返回false
    if(!(d1 instanceof Date) || !(d2 instanceof Date))
    {
        return ERROR;
    }

    var d1Year = d1.getFullYear();
    var d2Year = d2.getFullYear();
    var d1Month = d1.getMonth();
    var d2Month = d2.getMonth();
    var d1Date = d1.getDate();
    var d2Date = d2.getDate();

    //比较年
    if (d1Year < d2Year)
    {
        return LESSTHEN;
    }
   
    //如果年相等,比较月
    if (d1Year == d2Year)
    {   
        if (d1Month < d2Month)
        {
            return LESSTHEN;
        }
    }
    //如果年,月都相等,比较日
    if (d1Year == d2Year)
    {   
        if(d1Month == d2Month)
        {
                if (d1Date < d2Date)
                {
                           return LESSTHEN;
                }
        
                else if (d1Date == d2Date)
                {
                    return EQUALS;
                }
                else
                {
                    return GREATERTHEN;
                }
        }
        else
        {
           return GREATERTHEN;
        }
    }
    else
    {
       return GREATERTHEN;
    }
   
}

/**
* 日期比较
* @param {String} d1 日期1 格式为:yyyy-MM-dd或yyyy/MM/dd
* @param {String} d2 日期2 格式为:yyyy-MM-dd或yyyy/MM/dd
* @return {Number} 0:小于 1:等于 2:大于 3 错误
*/
function dateCompareStr(d1,d2)
{   var reg = "/";
    if(isValidDate(d1)&&isValidDate(d2))
    {
        d1 = new Date(Date.parse(d1.replace(/-/g,reg)));
            d2 = new Date(Date.parse(d2.replace(/-/g,reg)));
   
            return dateCompare(d1,d2);
    }
    else
    {   
        return ERROR;
    }
   
}


测试代码
Javascript代码  
alert(dateCompareStr('2010-08-30','2011-08-30'));   
alert(dateCompareStr('2011-08-30','2011-08-30'));   
alert(dateCompareStr('2011-08-30','2010-07-30'));  

alert(dateCompareStr('2010-08-30','2011-08-30'));
alert(dateCompareStr('2011-08-30','2011-08-30'));
alert(dateCompareStr('2011-08-30','2010-07-30'));


结果
0
1
2

楠楠 发表于 2011-8-21 10:46 | 显示全部楼层
如果只是单纯的比较某一日期是否比另外一个日期大或者小的话,直接可以这样:
后面日期要大于前面日期:2011-06-21    2011-07-25
去掉中间的-
然后就是
20110621    20110725
剩下的,你们都懂得~
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-24 01:33 , Processed in 0.124630 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表