Расчет разницы между часами
Я искал SO и нашел решения для этого, но они не используют date-fns или просто не работают, так как они вычисляют дни, а я сосредоточен только на часах в один и тот же день.
Я пытаюсь рассчитать разницу между двумя датами, или, более конкретно, между часами в один и тот же день, чтобы я мог узнать, когда кто-то включил и выключил часы, и вычислить количество часов, которые они отработали в этот день.
Я использую date-fns
Если я бегу console.log(this.myForm.value.startTime)
я получил 14:00
,
Если я бегу console.log(this.myForm.value.endTime)
я получил 16:00
,
Вот моя функция для расчета часов.
updateHours() {
var end = dateFns.format(new Date(this.myForm.value.endTime, 'HH:mm'));
var start = dateFns.format(new Date(this.myForm.value.startTime, 'HH:mm'));
var result = dateFns.differenceInMinutes(
new Date(end),
new Date(start)
)
console.log(result);
}
Значение result
всегда NaN
Что я делаю неправильно?
2 ответа
Происходит неправильный синтаксический анализ, поскольку вы хотите получить только разницу в minutes
было бы легче следовать этому подходу.
Значение установлено в end
а также start
переменные не были определены в исходном коде.
В следующем фрагменте я создаю новую дату, устанавливаю часы и минуты, используя метод date .setHours()
,
date.setHours(0, 0, 0); // Set hours, minutes and seconds
var start_time = "14:00";
var end_time = "16:00";
function updateHours() {
var current = new Date();
var start = current.setHours(start_time.split(":")[0], start_time.split(":")[1], 0);
var end = current.setHours(end_time.split(":")[0], end_time.split(":")[1], 0);
console.log(start, end)
var result = dateFns.differenceInMinutes(
end,
start
)
console.log(result);
}
updateHours();
.as-console {
height: 100%;
}
.as-console-wrapper {
max-height: 100% !important;
top: 0;
text-align:center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>
Рекомендации:
Я думаю, что это действительно легко, если у вас есть два Date
объекты, чтобы получить разницу вычитая Date.prototype.getTime
(так что пока не форматируйте с dateFns)
var minutes = Math.abs(start.getTime() - end.getTime()) / 60000 // display in minutes
Вы также можете округлить его, Math.round(minutes)
Надеюсь, поможет:)