论坛首页 Web前端技术论坛

JS简单日期比较

浏览 3163 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-04  
纯属练习,只能实现简单的日期比较,不足之处欢迎各路高手指出。欢迎贴代码。
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;
    }
    
}


测试代码
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-07-21  
如果只是单纯的比较某一日期是否比另外一个日期大或者小的话,直接可以这样:
后面日期要大于前面日期:2011-06-21    2011-07-25
去掉中间的-
然后就是
20110621    20110725
剩下的,你们都懂得~
0 请登录后投票
   发表时间:2011-10-14  
waitdream是大牛呀,将复杂问题简单化,厉害!
0 请登录后投票
   发表时间:2011-10-14  
Date类型可以直接相减,结果为毫秒间隔数,也能直接进行进行比较运算(>, <, >=, <=),如果觉得不保险可以getTime()取得它的总毫秒数再对比。

一个运算符的问题弄这么多函数。。。Orz
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics