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

xqhu299 2012-12-04 08:59:35
怎么样用JavaScript实现OA请假单上两个日期时间区间相减算出天数,可以去除周末和上班之外的时间(每天8小时)?跪求高手解答,感激不尽

...全文
1298 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
w1149650593 2013-07-05
  • 打赏
  • 举报
回复
引用 9 楼 yenange 的回复:
又见月经贴。 复杂的技术难题不如简单的业务化解。 有些事情是程序员无法或者说很难确定下来的。 就像你这个请假, 你想得很简单: 除了双休就行。 那还有节假日怎么办? 算了国家法定节假日, 那公司去旅游但他不参加还另外多请一天怎么办(其实也只能算一天)? …… 如此种种, 不如让他自己去填这个天数就好了——至少他自己心里是清楚到底请了多少天的(当然, 要规定下来, 至少请0.5天), 还有审核的人也一般来说看一眼就清楚了他写的天数与时间是否能正常对应, 毕竟也就是个简单的加减问题。
顶个
xqhu299 2013-06-30
  • 打赏
  • 举报
回复
你传入 8:30到17:30就可以了
吉普赛的歌 社区高级成员 T9 2013-06-30
  • 打赏
  • 举报
回复
又见月经贴。 复杂的技术难题不如简单的业务化解。 有些事情是程序员无法或者说很难确定下来的。 就像你这个请假, 你想得很简单: 除了双休就行。 那还有节假日怎么办? 算了国家法定节假日, 那公司去旅游但他不参加还另外多请一天怎么办(其实也只能算一天)? …… 如此种种, 不如让他自己去填这个天数就好了——至少他自己心里是清楚到底请了多少天的(当然, 要规定下来, 至少请0.5天), 还有审核的人也一般来说看一眼就清楚了他写的天数与时间是否能正常对应, 毕竟也就是个简单的加减问题。
「已注销」 2013-06-28
  • 打赏
  • 举报
回复
在线等啊 大神 急啊
「已注销」 2013-06-28
  • 打赏
  • 举报
回复
如果是 8:30到17:30怎么改
ironlee 2012-12-05
  • 打赏
  • 举报
回复
不知道是不是你说的那样 基本 算出了天数(不包括周末)
var days = diffDate( new Date( 2012 , 11 , 5 ) , new Date( 2012 , 11 , 10 ) );		
		function diffDate ( sd , ed ){//sd:开始时间;ed:结束时间;	
			if( !sd instanceof Date && ed instanceof Date ){
				return false;
			}			
			var realDiff = 0;
			for( var i = 0 ; i <= eds.diffDate( sd ) ; i++ ){
				var tempDate = sd.addDate( i );
				if( [0,6].indexOf(tempDate.getDay()) == -1 ){
					realDiff++;
				}
			}			
			return realDiff;
		}
		
		Date.prototype.diffDate = function( sd ){//两个日期相差的天数
			var st = sd.getTime(),et = this.getTime();
			if( st - et > 0 ) return 0;
			var sds = parseFloat(st / (3600*24*1000)).toFixed(0),eds = parseFloat(et / (3600*24*1000)).toFixed(0);			
			return eds - sds;
		}
		
		Date.prototype.addDate = function( day ){//增加天数
			return new Date( this.getFullYear() , this.getMonth() , this.getDate() + day );
		}
豪情 2012-12-05
  • 打赏
  • 举报
回复
楼主很猛那。
xqhu299 2012-12-05
  • 打赏
  • 举报
回复
这是我今天刚写好的


<!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>
鸡肋啊 2012-12-05
  • 打赏
  • 举报
回复
计算日期间的天数(周末,假期自己加判断减除) function daysBetween(date1,date2) { var m=0; var oneMinute=1000*60; var oneDay=oneMinute*60*24; date1.setHours(0); date1.setMinutes(0); date1.setSeconds(0); date2.setHours(0); date2.setMinutes(0); date2.setSeconds(0); var diff=date2.getTime()-date1.getTime(); return Math.ceil(diff/oneDay); }
xqhu299 2012-12-05
  • 打赏
  • 举报
回复
谢谢你,虽然不是我想要的那样,不过具有参考价值

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧