【问题标题】:Calculating difference between hours计算小时之间的差异
【发布时间】:2018-04-02 00:54:57
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: angular ionic-framework date-fns


    【解决方案1】:

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

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

    在下面的 sn-p 中我创建了一个新日期,使用日期方法 .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

    【讨论】:

    • 在我从表单this.myForm.value.startTime 中获得值之前效果很好,然后它返回NaN。我什至尝试了this.myForm.value.startTime as string,但没有成功。
    • @timgavin 为什么不直接做this.myForm.value.startTime = this.myForm.value.startTime | "00:00",这样虚假值就会被默认值覆盖!
    • 解决了!谢谢:)
    【解决方案2】:

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

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

    你也可以圆,Math.round(minutes)

    希望对你有帮助:)

    【讨论】:

    • 这个方法:var end = new Date(this.myForm.value.endTime) 给了我NaN,这个方法:var start = this.myForm.value.startTime; 给了我这个:ERROR TypeError: start.getTime is not a function
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多