1

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

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

例如,如果

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

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

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

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

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

4

3 回答 3

2

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>

于 2018-12-20T00:54:17.627 回答
0

如果我们使用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")));

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

于 2018-12-20T00:53:58.107 回答
0

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'));

于 2018-12-20T00:22:31.140 回答