请假系统中的时间差,单位是小时,开始结束的:年月日 、小时、 分钟都是从页面上输入的,上班小时是8:30-17:30
其中分钟是个下拉菜单只有00或30两个值。考虑到周六日的情况,高手帮忙解决下谢谢我写了写代码但不是很理想,求高手给个简单的JS

解决方案 »

  1.   

    http://hi.baidu.com/%D3%DC%C4%BE%C4%D4%B4%FC/blog/item/5a40db0367247eea09fa9327.htmljavascript类型 sql中的 datediff函数
      

  2.   

     function dateDiff(interval, date1, date2)
        {
            var objInterval = {'D' : 1000 * 60 * 60 * 24, 'H' : 1000 * 60 * 60, 'M' : 1000 * 60, 'S' : 1000, 'T' : 1};
             interval = interval.toUpperCase();
            var dt1 = Date.parse(date1.replace(/-/g, '/'));
            var dt2 = Date.parse(date2.replace(/-/g, '/'));
            try
            {
                return Math.round((dt2 - dt1) / eval('(objInterval.' + interval + ')'));
             }
            catch (e)
            {
                return e.message;
             }
         }说明:interval 取值: d (day), m(minutes), s(second), t(毫秒),不分区大小写
    日期格式: yyyy (/-) (m)m (/-) (d)d
    使用方式:alert(dateDiff('D', '2007-4-1', '2007/04/19'));
      

  3.   

        function dateDiff(interval, date1, date2)
        {
            var objInterval = {'D' : 1000 * 60 * 60 * 24, 'H' : 1000 * 60 * 60, 'M' : 1000 * 60, 'S' : 1000, 'T' : 1};
             interval = interval.toUpperCase();
            var dt1 = Date.parse(date1.replace(/-/g, '/'));
            var dt2 = Date.parse(date2.replace(/-/g, '/'));
            try
            {
                return Math.round((dt2 - dt1) / eval('(objInterval.' + interval + ')'));
             }
            catch (e)
            {
                return e.message;
             }
         }
      

  4.   


    function timeDif(date1,date2){
    //从date1到date2的时间差,考虑到周末和上班时间
    var date1New = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate());  // 
    var date2New = new Date(date2.getFullYear(),date2.getMonth(),date2.getDate()); //

    var date11=new Date(date1New.getTime()-(date1New.getDay()-1)*24*3600*1000); // 更新到本周开始的周一
    var date12= new Date(date11.getFullYear(),date11.getMonth(),date11.getDate()); //更新到周一的凌晨
    var diffDay =(date2New - date1New)/(24*3600*1000)- Math.floor((date2New - date12)/(24*7*3600*1000))*2; //计算实际缺的工作日

    var  date2 = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate(),date2.getHours(),date2.getMinutes()); // 转换到同一天
    var  dateBeg = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate(),8,30);  // 
    var  dateEnd = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate(),19,30);

    var difftime =((date2-dateEnd<0?date2:dateEnd )-(date1-dateBeg>0?date1:dateBeg))/(3600*1000);

    return diffDay*(19-8) + difftime;


    }
      

  5.   

     大哥你的date格式是什么样的呀 yyyy-MM-dd HH:mm?
      

  6.   

    date的格式是JS内置的Date类型。如果是两个字符串,应该把他们转化成Date类型,var date = new Date(str)
      

  7.   

    function date() {
    var totaldate = document.getElementById('insForm:totaldate');
    var str1 = document.getElementById('insForm:startDateInputDate').value;
    var str2 = document.getElementById('insForm:endDateInputDate').value;
    var str3 = document.getElementById('insForm:startdateHour').value;
    var str4 = document.getElementById('insForm:endDateH').value;
    var str5 = document.getElementById('insForm:startdateM').value;
    var str6 = document.getElementById('insForm:endDateM').value;
    var datetime1 = new Date(), datetime2 = new Date();
    datetime1.setFullYear(str1.substr(0, 4), str1.substr(5, 2) - 1, str1
    .substr(8, 2));
    datetime2.setFullYear(str2.substr(0, 4), str2.substr(5, 2) - 1, str2
    .substr(8, 2));
    datetime1.setMilliseconds(0);
    datetime2.setMilliseconds(0);
    var date1 = datetime1.setHours(0, 0, 0);
    var date2 = datetime2.setHours(0, 0, 0);
    datetime1.setHours(str3, 0, 0);
    datetime2.setHours(str4, 0, 0);
    var tothours = 0;
    if (datetime2.getHours() == 0) {
    return "";
    } else {
    if ((datetime1.getHours() == 8 && str5 == 2)
    || (datetime2.getHours() == 8 && str6 == 2)) {
    alert(" shi jian cuo wu!!")
    } else {
    if (date1 == date2) {
    // liang ge dou xiao yu
    if ((8 <= datetime1.getHours() < 12)
    && datetime2.getHours() < 12) { if (str5 == 2 && str6 == 2) {
    tothours = datetime2.getHours() - datetime1.getHours(); }
    if (str5 == 1 && str6 == 2) {
    tothours = datetime2.getHours() - datetime1.getHours()
    - 0.5; }
    if (str5 == 2 && str6 == 1) {
    tothours = datetime2.getHours() - datetime1.getHours()
    + 0.5; }
    if (str5 == 1 && str6 == 1) {
    tothours = datetime2.getHours() - datetime1.getHours(); }
    }楼上这是我写的最原始的方法拆分后进行判断,你的方法我试了但是没有达到我想要的效果...我现在已经把不考虑星期天的所有可能都写完了结果也是正确的,但是我觉得这个办法很笨,想问下高手有没有什么好的解决办法....
      

  8.   

    // liang ge dou xiao yu
    if ((8 <= datetime1.getHours() < 12)
    && datetime2.getHours() < 12) {if (str5 == 2 && str6 == 2) {
    这块写错了。。if里面不是这么写的if(8 <= datetime1.getHours()&&
    datetime1.getHours() < 12&& datetime2.getHours() < 12)这样写
    ......
      

  9.   

    str5 == 2 && str6 == 1   中的1表示30分钟 2表示00分钟  ,分钟是个<h:selectOneMenu />标签
      

  10.   

    这段代码有问题哦~~,如果date1=2011-06-30, date2=2011-07-01,求2个日期差几个月,返回结果是:0
    正确的应该是1
    我想,还是用substr做吧
      

  11.   

    javascript自己动手写写啊先!不用一碰到问题就问!