<!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>
<script type="text/javascript">
window.onload = function() {
document.getElementById('btn_calc').onclick = function() {
var obj = document.getElementById('demo').getElementsByTagName('input');

var ar_ds = obj[0].value.split('-');
var ar_ts = obj[1].value.split(':');
var ds = new Date(ar_ds[0], ar_ds[1] - 1, ar_ds[2], ar_ts[0], ar_ts[1]); 

var ar_de = obj[2].value.split('-');
var ar_te = obj[3].value.split(':');
var de = new Date(ar_de[0], ar_de[1] - 1, ar_de[2], ar_te[0], ar_te[1]); 

var result = de.getTime() - ds.getTime();

//开始、结束是否超过24小时,超过减15个小时乘天数
if (result > 86400000) result -= Math.floor(result / 86400000) * 54000000;

document.getElementById('result').innerHTML = '请假时间:' + (result / 3600000).toFixed(1) + '小时';
}
}
</script>
</head><body>
<div id="demo">
开始日期:<input type="text" value="2012-05-23" />&nbsp;开始时间:<input type="text" value="08:30" /><br />
    结束日期:<input type="text" value="2012-05-24" />&nbsp;结束时间:<input type="text" value="17:30" /><br />
    <button id="btn_calc">计算</button>
</div>
<div id="result"></div>
</body>
</html>

解决方案 »

  1.   


    //获取开始日期
    var StartDate = $("#tb_startDate").val();
    //获取开始时间
    var StartTime = $("#tb_startTime").val();
    //获取结束日期
    var EndDate = $("#tb_endDate").val();
    //获取结束时间
    var EndTime = $("#tb_endTime").val();//将开始日期以-为分割线分割成数组
    var sd = StartDate.split("-");
    //将开始时间以:为分割线分割成数组
    var st = StartTime.split(":");
    //将结束日期以-为分割线分割成数组
    var ed = EndDate.split("-");
    //将结束时间以:为分割线分割成数组
    var et = EndTime.split(":");        if (StartDate.length == 0 || StartDate == null) {
                alert("开始日期不能为空");
                return;
            }
            if (EndDate.length == 0 || EndDate == null) {
                alert("结束日期不能为空");
                return;
            }        //将开始日期转成日期格式
            var ds = new Date(sd[0], sd[1], sd[2]);
            //将结束日期转成日期格式
            var es = new Date(ed[0], ed[1], ed[2]);
            //定义间隔时数
            var result = 0;
            //定义第一天小时数
            var hours1 = 0;
            //定义最后一天小时数
            var hours2 = 0;
            //得到间隔天数
            var date = (es - ds) / 86400000;
            //如果开始时间小于8:30,则把开始时间改为8:30,如果开始时间大于17:30,则把开始时间改为17:30
            if ((st[0] + st[1]) < 830) {
                st[0] = 8;
                st[1] = 30;
            } else if ((st[0] + st[1]) > 1730) {
                st[0] = 17;
                st[1] = 30;
            }
            //如果结束时间小于8:30,则把结束时间改为8:30,如果结束时间大于17:30,则把结束时间改为17:30
            if ((et[0] + et[1]) < 830) {
                et[0] = 8;
                et[1] = 30;
            }
            if ((et[0] + et[1]) > 1730) {
                et[0] = 17;
                et[1] = 30;
            }
            //如果开始时间小时数小于12点,则小时数为17点减去小时数和午休1小时,否则不用减去午休1小时
            if (st[0] < 12) {
                hours1 = 17 - st[0] - 1;
            } else if (st[0] >= 12) {
                hours1 = 17 - st[0];
            }
            //如果结束时间小时数小于或等于12点,则小时数减去8点,否则就要多减去午休1小时
            if (et[0] <= 12) {
                hours2 = et[0] - 8;
            } else if (et[0] > 12) {
                hours2 = et[0] - 8 - 1;
            }
            //如果间隔天数为1天,则只用计算开始时间的小时数与结束时间的小时数,反之则中间间隔天数*8+开始时间小时数和结束时间小时数
            if (date == 1) {
                result = ((hours1 + hours2) * 60 + parseInt(et[1]) - parseInt(st[1])) / 60;
            } else if (date > 1) {
                result = ((hours1 + hours2) * 60 + parseInt(et[1]) - parseInt(st[1])) / 60 + (date - 1) * 8;
            }我自己给做出来了,谢谢你们提示
      

  2.   

    http://www.9958.pw/post/jquery_time_hour 试试