Расчет разницы между часами

Я искал 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>

Рекомендации:

  1. Установить часы

Я думаю, что это действительно легко, если у вас есть два Date объекты, чтобы получить разницу вычитая Date.prototype.getTime (так что пока не форматируйте с dateFns)

var minutes = Math.abs(start.getTime() - end.getTime()) / 60000 // display in minutes

Вы также можете округлить его, Math.round(minutes)

Надеюсь, поможет:)

Другие вопросы по тегам