使用Moment.js和Ranges计算加班时间

时间:2018-12-20 00:13:39

标签: javascript momentjs

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

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

例如,如果

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

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

我该如何计算晚上8点到晚上10点之间的工作时间。

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

我尝试了extendedMomentjs和范围,但是重叠并且包含功能仅返回true或false。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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'));

答案 2 :(得分: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")));

让工作人员在午夜之后处理工作……