zoukankan      html  css  js  c++  java
  • JS获取时间段内的工作时长

    需求 

    1、给一个开始时间和结束时间;

    2、计算在时间段内工作时间长度;

    3、工作时间是9点-18点;

    4、工作时长是8小时;

    5、不记录周六和周日时间;

    插件

    使用了moment.js

    代码

     1 function GetWorkHours(beginDateTime, endDateTime) {
     2     var _totalHour = 0;
     3     //1、获取开始时间和结束时间之间的日
     4     var _beginDate = moment(beginDateTime);
     5     var _endDate = moment(endDateTime);
     6 
     7     //整理时间
     8     if (_beginDate.get("hour") < 9) {
     9         //开始时间小于9点,设置为9点
    10         _beginDate.hour(9);
    11     } else if (_beginDate.isBetween(moment(_beginDate).hour(12), moment(_beginDate).hour(13), 'hour', {})) {
    12         //开始时间在12点-13点之间,设置为13点
    13         _beginDate.hour(13);
    14     } else if (_beginDate.get("hour") >= 18) {
    15         _beginDate.add(1, 'd').hour(9);
    16     }
    17 
    18     if (_endDate.get("hour") > 18) {
    19         //结束时间大于18点,设置为18点
    20         _endDate.hour(18);
    21     } else if (_endDate.isBetween(moment(_endDate).hour(12), moment(_endDate).hour(13), 'hour', {})) {
    22         //结束时间在12点-13点之间,设置为12点
    23         _endDate.hour(12);
    24     } else if (_endDate.get("hour") <= 9) {
    25         _beginDate.add(-1, 'd').hour(18);
    26     }
    27 
    28 
    29     var _tempDateTime = _beginDate;//缓存一个日期,起始时开始时间
    30     while (moment(_tempDateTime).isSameOrBefore(_endDate, "day")) {
    31 
    32         //2.1、判断是否周日,周六
    33         var _week = moment(_tempDateTime).weekday();
    34         if (_week == 0 || _week == 6) {
    35             //是周末,不算入时间
    36             _tempDateTime.add(1, 'd');
    37             continue;
    38         }
    39 
    40         if (moment(_tempDateTime).isSame(_beginDate, "day")) {
    41             if (moment(_tempDateTime).isSame(_endDate, "day")) {
    42                 //开始时间和结束时间是同一天,结束时间-开始时间
    43                 _totalHour += _endDate.diff(_beginDate, "hours", true);
    44                 //如果跨越中午12点30分,减去一个小时
    45                 if (moment(_tempDateTime).hour(12).minute(30).isBetween(_beginDate, _endDate, 'hour')) {
    46                     _totalHour -= 1;
    47                 }
    48                 _tempDateTime.add(1, 'd');
    49                 continue;
    50             } else {
    51                 //开始时间和结束时间不是同一天,18点-开始时间
    52                 _totalHour += moment(_beginDate).hour(18).diff(_beginDate, "hours", true);
    53                 //如果跨越中午12点30分,减去一个小时
    54                 if (moment(_tempDateTime).hour(12).minute(30).isBetween(_beginDate, moment(_beginDate).hour(18), 'hour')) {
    55                     _totalHour -= 1;
    56                 }
    57                 _tempDateTime.add(1, 'd');
    58                 continue;
    59             }
    60         }
    61         else if (moment(_tempDateTime).isSame(_endDate, "day")) {
    62             //是否和结束时间是同一天,结束时间-开始时间9点,
    63             _totalHour += _endDate.diff(moment(_endDate).hour(9), "hours", true);
    64             //如果跨越中午12点30分,减去一个小时
    65             if (moment(_tempDateTime).hour(12).minute(30).isBetween(moment(_endDate).hour(9), _endDate, 'hour')) {
    66                 _totalHour -= 1;
    67             }
    68             _tempDateTime.add(1, 'd');
    69             continue;
    70         }
    71         else {
    72             _totalHour += 8;
    73             _tempDateTime.add(1, 'd');
    74             continue;
    75         }
    76 
    77     } 
    78     return _totalHour < 0 ? 0 : _totalHour;
    79 }
    View Code
  • 相关阅读:
    Unity异步加载场景loading条
    (转)Unity3D命令行Build
    (转)Unity3d UnityEditor编辑器定制和开发插件
    (转)U3D不同平台载入XML文件的方法——IOS MAC Android
    Unity3D中的欧拉角的理解
    (转)在ios android设备上使用 Protobuf (使用dll方式)
    (转)[原创]在ios android设备上使用 Protobuf (使用源码方式)
    (转)欧拉角与万向节死锁
    (转) unity 在移动平台中,文件操作路径详解
    微信小程序四(设置底部导航)
  • 原文地址:https://www.cnblogs.com/qiumc/p/5408939.html
Copyright © 2011-2022 走看看