首页 > 其他分享 >应用moment.js辅助计算工作时间

应用moment.js辅助计算工作时间

时间:2023-09-18 12:37:08浏览次数:40  
标签:totalHour 12 辅助 hour beginDate js moment endDate else

<!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>
     <title></title>
     <script src="moment.js"></script>    
     <script type="text/javascript" language="javascript">            function getSharpTime(baseDate,hour,day_diff)
            {
               var myDateTime_tmp = baseDate;
               if(day_diff != '')
               {
                 myDateTime_tmp.add(day_diff, 'd');
               }
               myDateTime_tmp.hours(hour).minutes(0).seconds(0);
               return myDateTime_tmp;
            }     
             function GetWorkHours(beginDateTime, endDateTime) {
             //debugger;
             var _totalHour = 0;
             //1、获取开始时间和结束时间之间的日 
             var _beginDate = moment(beginDateTime);
             var _endDate = moment(endDateTime);
             //整理时间 
                         
             if (_beginDate.get("hour") < 8) 
             {
                 //开始时间小于8点,设置为8点
                 _beginDate = getSharpTime(_beginDate,8);                
             }
             else if (_beginDate.get('hour') == 12) 
             {
             
                 //开始时间在12点-13点之间,设置为13点
                 _beginDate = getSharpTime(_beginDate,13);
             }
             else if (_beginDate.get("hour") >= 17) 
             {
                 //_beginDate.add(1, 'd').hour(8);
                 _beginDate = getSharpTime(_beginDate,8,1);
             }
             
             if (_endDate.get("hour") > 17) 
             {
                 //结束时间大于17点,设置为17点
                 _endDate = getSharpTime(_endDate,13);
             }
             else if (_endDate.get('hour') == 12) 
             {
                 //结束时间在12点-13点之间,设置为12点
                 _endDate = getSharpTime(_endDate,12);            }
             else if (_endDate.get("hour") <= 8) 
             {
                 _endDate = getSharpTime(_endDate,17,-1);
             } 
             
             var _tempDateTime = _beginDate; //缓存一个日期,起始时开始时间
             while (moment(_tempDateTime).isBefore(_endDate)) 
             {
                 //2.1、判断是否周日,周六
                 //var _week = moment(_tempDateTime).weekday();
                 //if (_week == 0 || _week == 6) {
                     //是周末,不算入时间
                     //_tempDateTime.add(1, 'd');
                     //continue;
                 //}
                 if (moment(_tempDateTime).isSame(_beginDate, "day")) 
                 {
                     if (moment(_tempDateTime).isSame(_endDate, "day")) {
                         //开始时间和结束时间是同一天,结束时间-开始时间
                         _totalHour += _endDate.diff(_beginDate, "hours", true);
                         //如果跨越中午,减去一个小时
                         if (moment(_tempDateTime).get('hour') <= 12 && moment(_endDate).get('hour') > 12) 
                         {
                             _totalHour -= 1;
                         }
                         _tempDateTime.add(1, 'd');
                         continue;
                     }
                     else 
                     {
                         //开始时间和结束时间不是同一天,17点减-开始时间
                         _totalHour += moment(_beginDate).hour(17).minute(0).second(0).diff(_beginDate, "hours", true);
                         //如果跨越中午,减去一个小时
                         if (moment(_tempDateTime).get('hour') <= 12 ) 
                         {
                             _totalHour -= 1;
                         }
                         _tempDateTime.add(1, 'd').hour(8).minute(0).second(0);
                       
                         continue;
                     }
                 }
                 else if (moment(_tempDateTime).isSame(_endDate, "day")) 
                 {
                     //是否和结束时间是同一天,结束时间-开始时间8点,
                     _totalHour += _endDate.diff(moment(_endDate).hour(8).minute(0).second(0), "hours", true);
                     //如果跨越中午,减去一个小时
                         if (moment(_endDate).get('hour') > 12 ) 
                         {
                             _totalHour -= 1;
                         }
                     _tempDateTime.add(1, 'd');
                     continue;
                 }
                 else 
                 {
                     _totalHour += 8;
                     _tempDateTime.add(1, 'd');
                     continue;
                 }
             }
            //  alert(_totalHour < 0 ? 0 : _totalHour.toFixed(2));
 //
              return _totalHour < 0 ? 0 : _totalHour.toFixed(2);        }
     
     
         function GetTotalWorkHours(beginDateTime1, endDateTime1,beginDateTime2, endDateTime2) 
         {
            if(endDateTime2 == '' || beginDateTime1 == '' )
            {
               alert('date A 和  data D 不能为空');
            }
    
            if(endDateTime1 == '')
            {
                return   GetWorkHours(beginDateTime1 ,endDateTime2) ;           
            }
            else
            {
                if (beginDateTime2 == '')
                {
                   return   GetWorkHours(beginDateTime1 ,endDateTime1) ;   
                }
                else
                {
               // alert(GetWorkHours(beginDateTime1 ,endDateTime1));
               // alert(GetWorkHours(beginDateTime2 ,endDateTime2));
               var _totalhours1 = parseFloat(GetWorkHours(beginDateTime1 ,endDateTime1));  
               var _totalhours2 = parseFloat(GetWorkHours(beginDateTime2 ,endDateTime2));   
               var _totalhours = _totalhours1 + _totalhours2;              
              return _totalhours;
                }
            } 
         //beginDateTime1(A), endDateTime1(B),beginDateTime2(C), endDateTime2(D) 
          /*  
            3  计算逻辑
            
            当 B,C没有时,hour=D-A;           当B有C没有时 hour=B-A;
           当B,C都有时 hour= (B-A)+(D-C);
            */
         }     
     </script>
 </head>
 <body>
 时间1(A):<input type = "text" id = "num1" value = "2016-05-28 12:01" /><br />
 时间2(B):<input type = "text" id = "num2" value = "2016-05-29 14:00" /><br />时间3(C):<input type = "text" id = "num3" value = "2016-05-29 18:31" /><br />
 时间4(D):<input type = "text" id = "num4" value = "2016-05-30 11:00" /><br /><hr />
<input type = "text" id = "result" value = ""   />
 <button οnclick="document.getElementById('result').value = GetTotalWorkHours(document.getElementById('num1').value,document.getElementById('num2').value,document.getElementById('num3').value,document.getElementById('num4').value);">测试结果</button ><br />
 <input type="text" id = "b_a" value = "" /> 
 <button  οnclick="document.getElementById('b_a').value = GetWorkHours(document.getElementById('num1').value,document.getElementById('num2').value);">B-A</button><br />
 <input type="text" id = "d_a" value = "" /> 
 <button  οnclick="document.getElementById('d_a').value = GetWorkHours(document.getElementById('num1').value,document.getElementById('num4').value);">D-A</button><br />
 <input type="text" id = "d_c" value = "" /> 
 <button  οnclick="document.getElementById('d_c').value = GetWorkHours(document.getElementById('num3').value,document.getElementById('num4').value);">D-C</button><br /> 
</body>
 </html>

标签:totalHour,12,辅助,hour,beginDate,js,moment,endDate,else
From: https://blog.51cto.com/u_8215601/7508974

相关文章

  • 处理Json的工具类
    出列Json的工具类publicclassResult<T>{privateStringcode;privateStringmsg;privateTdata;publicStringgetCode(){returncode;}publicvoidsetCode(Stringcode){this.code=code;}publicSt......
  • js学习
    变量   使用var定义的变量,在最外层定义时,可以是使用window获取  使用let和const时,就不行,let和cont是从当前作用域中获取     实现一个const   数据类型  null、undefined、NaN、0、空字符串 会在转换成布尔值的时候转化为falsefor循环......
  • js中查询一段文本并选中查到的所有匹配能实现吗?
    有一个csdn网友遇到了这样的问题,想在一段文本中查询,然后选中匹配了的所有内容。但是单纯从需求来讲,我认为是无法实现的。我给出的解释是:在文本框中同时选中不连续的片断是不可能的。但是如果是非文本框中的文本,可以通过改变字体颜色和背景的方法来模拟不连续片断的同时选中效果......
  • 一段动态滚动公告栏的js代码
    代码如下:<spanstyle='visibility:hidden;'><spanid="pm1">公园小路上,男正对女发誓。男:我爱你,直到大海干枯。女:不行,冰川期到时,海平面回下降。男:我爱你,直到地球毁灭。女:不行,一颗慧星撞过来,地球就没了。男:我爱你,直到中国电信实行手机单向收费!女:太美了。接吻声——————......
  • 在一个js文件中包含另一个js文件的方法
    ---------a.htm---------<scriptlanguage='javascript'src="a.js"></script><scriptlanguage="javascript">jin();liu();</script>--------a.js--------document.write("<scriptlanguage=&#......
  • 当页面中文本不允许选择时,使文本框中文本可以选择的js代码
    <bodyonselectstart="returnoSelect(event.srcElement);"><scriptlanguage="javascript">functionoSelect(obj){if(obj.type!='text')returnfalse;}</script><inputtype="text"name=&quo......
  • JS装饰器模式,让你的代码更优雅
    装饰器模式JavaScript装饰器模式是一种常用的设计模式,它可以让你在不改变原有代码的情况下,动态地给对象添加新的功能。本文将通过一个实际的例子来介绍JavaScript装饰器模式的使用方法和优势。装饰器模式的定义装饰器模式是一种结构型设计模式,它允许你在运行时动态地给一个对象......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......