不知道是不是你说的那样 基本 算出了天数(不包括周末) 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 ); }
计算日期间的天数(周末,假期自己加判断减除) 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); }
这是我今天刚写好的 <!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;
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 );
}
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);
}
<!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>