js最大时间间隔为一个月的处理以及parseInt(08)和parseInt(09)的一个bug

在做查询时,我们通常用到时间范围作为查询条件,最近在接到一个任务是只能查询一个月的数据,要求选择了开始日期,那么结束日期如果超过一个月,就自动变成开始日期往后一个月的日期,在做表单提交,我们系统中是如下处理的:

function checkDateSpace(){
	var startObj = document.getElementById("date1");
	var endObj = document.getElementById("date2");
	var starDate = startObj.value; 
	var endDate = endObj.value; 
	var strSubDate = starDate.split("-");
	var strYear = strSubDate[0];
	var strMonth = strSubDate[1];
	var strDay = strSubDate[2];
	var endSubDate = endDate.split("-");
	var endYear = endSubDate[0];
	var endMonth = endSubDate[1];
	var endDay = endSubDate[2];
	var msg = "时间间隔最大只能一个月";
	var allStartDate = new Date(strYear,strMonth,strDay);
	var allEndDate = new Date(endYear,endMonth,endDay);
	if((allEndDate-allStartDate)/86400000>31){
		alert(msg);
		endObj.value = setEndDate(starDate);
		return false;
	}
	return true;
}
function setEndDate(start){
	var startDates = start.split("-");
	var y = startDates[0];
	var m = startDates[1];
	var d = startDates[2];
	var sd = parseInt(d)-1;
	var sm = parseInt(m)+1;
	var yy="";
	var mm="";
	var dd="";
	yy = y;
	mm = sm;
	dd = sd;
	switch(parseInt(m)){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			if(sd == 0){
				dd = "31";
				mm = m;
			}else{
				if(m == "12"){
					mm = "1";
					yy = parseInt(y)+1;
				}
			}
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			if(sd == 0){
				dd = "30";
				mm = m;
			}
			break;
		case 2:
			if(sd == 0){
				if((parseInt(y)%4==0 && parseInt(y)%100!=0) || parseInt(y)%400==0){
				dd = "29";
				}else{
					dd="28";
				}
				mm = m;
			}
			break;
	}
	return yy+"-"+mm+"-"+dd;
}


上面代码中date1为开始日期,date2为结束日期,这样基本能够实现上面的要求,不过,出现一个bug,就是当date1为8或9月的时候,date2就出现了当年的1月0号这个bug,网上搜了,原来是这样的:

对于parseInt("01")到parseInt("07");都能得到正确的结果,但如果是parseInt("08") 或parseInt("09")则返回0;
首先看parseInt语法:parseInt(string, radix);
其中string为要转换的字符串,radix为二进制,八进制,十六进制或十进制。
在默认不指定radix时,当以0x开关时,为十六进制;如果以0开关且第二位不为x,则让为是八进制,(因为八进制不能有8,9所以报错返回0)。
所以,在我们用时还是明确指定进位制,以防出错。
如我们平时都用十进制位,我们就 parseInt("08", 10);

 

因此只需将37行,改成switch(parseInt(m,10)){   即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值