日期:2014-05-16  浏览次数:20452 次

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