<!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>