Расчет сверхурочных с моментами и диапазонами - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть время начала и окончания для любого дня в течение 24 часов.

Я хочу подсчитать, сколько часов было проработано за определенный промежуток времени.

Например, если

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

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

, как подсчитать, сколько часов работало между20:00 и 22:00.

Я хочу, чтобы на выходе было вычисленное количество часов и минут в этом диапазоне.

Я пробовал extendedMomentjs и диапазоны, но перекрытие и функциональность содержат только возвращаемые значения true или false..

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Если мы используем 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

Кстати, так как вы говорите: «Как я могу подсчитать, сколько часов было отработано между 20:00 и 22:00?», Попробуйте следующее:

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

Обработка работы после полуночи оставлена ​​какупражнение для читателя ...

0 голосов
/ 20 декабря 2018

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>
0 голосов
/ 20 декабря 2018

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