var LESSTHEN = 0;
var EQUALS = 1;
var GREATERTHEN = 2;
var ERROR = 3;
/**
* 校驗輸入內(nèi)容為合法日期
* @param {String} str 日期字符串
* @return {Boolean} true:日期符合格式y(tǒng)yyy-MM-dd或yyyy/MM/dd false:日期不符合格式y(tǒng)yyy-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'));
結(jié)果
0
1
2