计算小时之间的差异

Calculating difference between hours

我搜索过 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

我做错了什么?

我认为如果你有两个 Date 对象,减去 Date.prototype.getTime 的差值真的很容易(所以不要用 dateFns 格式化)

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

也可以四舍五入,Math.round(minutes)

希望对您有所帮助:)

正在进行不正确的解析,因为您只想获得 minutes 中的差异,所以遵循这种方法会更容易。

设置为 endstart 变量的值在原始代码中未定义。

在下面的代码片段中,我创建了一个新日期,使用日期方法 .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. Set hours