浏览 3163 次
锁定老帖子 主题:JS简单日期比较
精华帖 (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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-21
如果只是单纯的比较某一日期是否比另外一个日期大或者小的话,直接可以这样:
后面日期要大于前面日期:2011-06-21 2011-07-25 去掉中间的- 然后就是 20110621 20110725 剩下的,你们都懂得~ |
|
返回顶楼 | |
发表时间:2011-10-14
waitdream是大牛呀,将复杂问题简单化,厉害!
|
|
返回顶楼 | |
发表时间:2011-10-14
Date类型可以直接相减,结果为毫秒间隔数,也能直接进行进行比较运算(>, <, >=, <=),如果觉得不保险可以getTime()取得它的总毫秒数再对比。
一个运算符的问题弄这么多函数。。。Orz |
|
返回顶楼 | |