用JS实现OA请假单上两个日期时间区间相减算出天数



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> 请假例子</title>
</head>
<script type="text/javascript"> 
	/*根据起始时间和结束日期计算天数*/
	function  DateDiffNoWeekDay(sDate1,sDate2){    
		var sDate1=document.getElementById("date1").value;
		var sDate2=document.getElementById("date2").value;
		
	   //日期格式为yyyy-mm-dd  
	   var oDate1  = StringToDate(sDate1);
	   var oDate2  = StringToDate(sDate2); 
		/*alert('取整-->'+parseInt((oDate2 - oDate1) / 1000 / 60 / 60 /24));
		alert('非取整-->'+(oDate2 - oDate1) / 1000 / 60 / 60 /24);*/
	   if (parseInt((oDate2 - oDate1) / 1000 / 60 / 60 /24)<(oDate2 - oDate1) / 1000 / 60 / 60 /24)
	   {
        var days = parseInt((oDate2 - oDate1) / 1000 / 60 / 60 /24)+1;
	   }
	   else {days = parseInt((oDate2 - oDate1) / 1000 / 60 / 60 /24);}
       
	   //var days = parseInt((oDate2 - oDate1) / 1000 / 60 / 60 /24);//获取总的天数
	   var days1= parseInt((oDate2 - oDate1) / 1000 / 60 / 60 )%8;  //获取余下的小时
	  /*--减去不用上班的时间,即09-18之外的时间--*/
	 	 if(days1>8){
		  	 days1=8;
		   }  
	   var tempDate = oDate1;
	   while(tempDate.getTime() <= oDate2.getTime()){
		//tempDate = addDays(tempDate,2);//加一天
		//days>0表示超过1天,防止出现负数days
		if(checkWeekDay(DateToString(tempDate))& days>0 ){
			//如果是周末,天数减1
		 days--;
		}
		tempDate = addDays(tempDate,2);//加一天
	   }
	   if (days ==1)
	   {
		if(parseInt((oDate2-oDate1)/1000/60/60/24)==0& days1==0) {days=1;}
	    else{days=0;}/*一天或半天加判断解决天数的问题*/
	   }
	  
 
      day2.value=days+"天"+days1+"小时";
    }
 
     /*判断是否含有周末,如果是周末 返回true,没有返回false*/
	function checkWeekDay(sDate){
	   arys=sDate.split('-');
	   arys1=arys[2].split(' ');
		arys2=arys1[1].split(':');
	   oDate  =  new Date(arys[0],parseInt(arys[1], 10) - 1,arys1[0],arys2[0],arys2[1],arys2[2]);
	   day = oDate.getDay();//判断是否周末
	   if(day==0 || day == 6){
		return true;
	   }
	   return false;
    }
	/*增加天数*/
	function addDays(oDate,days){
     if(days > 0){
            days = days - 1;
        }
     if(days < 0){
            days = days + 1;
        }
     var result = new Date(oDate.getTime()+(days*24 * 60 * 60 * 1000));
         return result;
 	}
	/*将字符串转换成日期*/
	function StringToDate(sDate){
		arys=sDate.split('/');
		arys1=arys[2].split(' ');
		arys2=arys1[1].split(':');
		if(arys2[0]>18){
			arys2[0]=18;
			arys2[1]=00;
			arys2[2]=00;
			}
			if(arys2[0]<10){//9
				arys2[0]=10;//9
				arys2[1]=0;
				arys2[2]=0;
				}
        var newDate=new Date(arys[0],parseInt(arys[1], 10) - 1,arys1[0],arys2[0],arys2[1],arys2[2]);
		return newDate;
     }
	 /*为一部分月份及日期加前+0*/
	 function DateToString(oDate){
        var month = oDate.getMonth()+1;
        var day = oDate.getDate();
		var  hour=oDate.getHours();
		var  mi=oDate.getMinutes();
		var second=oDate.getSeconds();
		//如果月份小于10月则在前面加0
    	if(month<10){
           month="0"+month;
        }
		//如果日期小于10号则在前面加0
   		if(day<10){
          day = "0"+day;
      	}
		if(hour<10){
			//如果小于9点 设置为9点
			if(hour<10){ //9
			 hour=10;//9
			}
          hour = "0"+hour;
      	}
		//如果大于18点,让他等于18点
		if(hour>18){
			hour=18;
			}
		if(mi<10){
          mi = "0"+mi;
      	}
		if(second<10){
          second = "0"+second;
      	}
      	return oDate.getFullYear() + "-" + month +"-"+ day+" "+hour+":"+mi+":"+second;
  	}
</script>
<body>
<input type="text" id="date1" value="2012/12/28 09:00:00"/>
<input type="text" id="date2" value="2012/12/31 18:00:00"/>
<input type="text" id="day2" value=""/>
<input type="button" onclick="DateDiffNoWeekDay();" value="根据日期时间计算天数" /><br>
<input type="text" style="height:20px;width:467px" disabled="true" id="11" value="如遇周六周日不参与计算,每天的时间定义为:10:00--18:00,共计8小时." />
</body>
</html>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值