【问题标题】:Calculating overtime with momentjs and ranges用 momentjs 和 range 计算加班时间
【发布时间】:2018-12-20 00:13:38
【问题描述】:

我有 24 小时制任何一天的开始和结束时间。

我想计算在特定时间范围内工作了多少小时。

例如,如果

startTime = '11:00';
endTime = '21:30';

calcOverTime(startTime, endTime) // result 1 hour worked between 8pm and 10pm

我如何计算晚上 8 点到 10 点之间工作了多少小时。

我希望输出是该范围内计算得出的小时数和分钟数。

我尝试过extendedMomentjs 和范围,但重叠和包含功能只返回真或假。

【问题讨论】:

  • @KenY-N 我尝试使用 extendMomentjs 创建两个范围,其中一个只是开始和结束时间,另一个是晚上 8 点到晚上 10 点。重叠和包含函数只返回true,但我想计算范围内的小时数,而不是确定是否有。

标签: javascript momentjs


【解决方案1】:

var startTime = moment('1970-01-01 11:00');
var endTime = moment('1970-01-01 21:30');

var dayEndTime = moment('1970-01-01 20:00');

var overtime = moment.duration(0);

if (endTime.isAfter(dayEndTime)) {
	var time = startTime.isAfter(dayEndTime) ? startTime : dayEndTime;
	overtime = moment.duration(endTime.diff(time));
}

console.log('As Hours: ', overtime.as('hours'));
console.log('As Minutes: ', overtime.as('minutes'));
console.log('Get only Hours: ', overtime.get('hours'));
console.log('Get only Minutes: ', overtime.get('minutes'));
<script src="https://momentjs.com/downloads/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    const hours = (startTime, finishTime) => {
      const [startHours, startMinutes] = startTime.split(':');
      const [finishHours, finishMinutes] = finishTime.split(':');
      const startTimeinMinutes = (parseInt(startHours) * 60) + parseInt(startMinutes);
      const finishTimeinMinutes = (parseInt(finishHours) * 60) + parseInt(finishMinutes);
      const totalMinutes = finishTimeinMinutes - startTimeinMinutes;
      const minutes = totalMinutes % 60;
      const hours = (totalMinutes - minutes)/60;
      return `${hours}:${minutes < 10 ? '0' : ''}${minutes}`;
    };
    
    console.log(hours('11:00', '21:30'));

    【讨论】:

    • 我没有将字符串解析为int,现在已经修复了。
    • 这只是给了我开始和结束之间的时间,我在计算晚上 8 点和晚上 10 点之间的几个小时之后。因此,例如 '19:00' 到 '21:00' 将导致 '01:00'
    【解决方案3】:

    如果我们使用moment.js,这似乎可行:

    d = moment.duration(moment(endTime, "HH:mm").diff(moment(startTime, "HH:mm")));
    

    这给出了一个Duration 对象,您可以通过各种方式打印出来,例如:

    d.as('hours');
    

    给予:

    10.5

    或者:

    console.log(`${d.hours()}:${d.minutes() < 10 ? '0' : ''}${d.minutes()}`);
    

    这给出了:

    10:30

    顺便说一句,既然你说“我怎么计算晚上 8 点到 10 点之间工作了多少小时。”,试试这个:

    d = moment.duration(moment(endTime, "HH:mm").diff(moment("20:00", "HH:mm")));
    

    处理超过午夜的工作留给读者作为练习......

    【讨论】:

      猜你喜欢
      • 2020-04-05
      • 2022-10-24
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多