JS计算工作时间差
这是一个出差申请表单~~在表单里自己选择一个开始时间和结束时间  然后就自动求出合计出差时间了 时间包括年月日和几点  比如  开始时间2011-12-12 4点 结束2011-12-13 4点 合计出差时间就是8小时 上班时间为8-12  13-17 跪求高手帮忙啊  
		var date=0;//综合时间  
		var allhour=0;//总小时  
  		var startdate = Page.thisObj('TO2CCMX.kd').value;//获取页面的开始日期  
  		var starttime = Page.thisObj('TO2CCMX.starttime_hour').value;//获取页面的开始时间    		
  		var enddate = Page.thisObj('TO2CCMX.sd').value;//获取页面的结束日期
  		var endtime = Page.thisObj('TO2CCMX.endtime_hour').value;//获取页面的结束时间
		 if(enddate<startdate)
		 {
		 	alert("结束时间不能小于开始时间");
		 }else if(enddate==startdate)
		 {
		 	alert("提示:如您的出差时间小于1天,请填写外出单!");
		 }else
		 {
		 	var startyear = parseInt(startdate.substring(0,8));//截取开始日期/年  
		 	var endyear = parseInt(startdate.substring(0,8));//截取结束日期/年  
		 	var startmonth = parseInt(startdate.substring(5,7));//截取开始日期/月  
		 	var endmonth = parseInt(startdate.substring(5,7));//截取结束日期/月  
		 	var startday = parseInt(startdate.substring(8,10));//截取开始日期/日  
		 	var endday = parseInt(enddate.substring(8,10));//截取结束日期/日
             if(startyear==endyear && startmonth==endmonth)
             {
             	var day = endday-startday;             	
             	if(((8<=starttime && starttime<=12) || (13<=starttime && starttime<=17))&&((8<=endtime && endtime<=12) || (13<=endtime && endtime<=17)))
             	{
					if(starttime<endtime)
					{
						allhour=(endtime-starttime)+8;
					}else
					{
						allhour=8;
					}
				}             		
				/*
				else if(endtime<starttime)
				{
					if(((8<=starttime && starttime<=12)&&(13<=starttime && starttime<=17)) && (8<=endtime && endtime<=12)&&(13<=endtime && endtime<=17))
             		{
						allhour=8-(startime-endtime);
				    }else
				    {
						allhour=8
					}
				}*/
			}
			else if(startyear==endyear && startmonth==endmonth && starttime==endtime)
			{
		 		date = endday - startday;
		 		allhour = date*8;
		 	}else if(startyear==endyear && startday==endday && starttime==endtime)
		 	{
				date = endhour - starthour;
				allhour = date*30*8;	  
		    }else if(startmonth==endmonth && startday==endday && starttime==endtime)
		    {
				date = endyear - startyear;
				allhour = date*12*30*8;
			}
写了半天没写出来啊 纠结死
------解决方案--------------------代码没经过测试。不过逻辑是这样
javascript的API发现在js中月份的范围是0-11即从0开始(0表示一月份),所以也就会出现我前面说的2010-03-31被js看成是2010-04-01,其实是这么回事:2010-03-31在js中表示的时间是2010年4月31日而不是2010-3-31,我们知道4月份是没有31日的,所以js会默认地帮你向后移一天也即2010-4-1(注意这里表示的时间是2010年5月1日)
因此我们只要在原来的月份上减去一,然后通过getTime()获取毫秒数,并两者相减,再除以一天的毫秒数即得到所谓的相隔天数!!!
EG:
   var start = $("#startDate").val();
   var end = $("#endDate").val();
   if(!start.match(new RegExp('^[0-9]+-[0-9]+-[0-9]+.*$'))){
       alert("Please choosh the start date!");
       return;
   }
   if(!end.match(new RegExp('^[0-9]+-[0-9]+-[0-9]+.*$'))){
       alert("Please choosh the end date!");
       return;
   }
   if(reason==''){
       alert("Please input reason!");
       return;
   }
   var startTmp = start.split("-");
   var endTmp = end.split("-");
   var dS = new Date(startTmp[0],parseInt(startTmp[1])-1,startTmp[2]);//注意这里减除一
   var dE = ne