2017-10-20 194 views
0

我已经搜索过,并已找到解决方案,但他们不使用日期-Fns或只是不工作,因为他们正在计算天,我只专注于小时同一天。计算小时之间的差异

我试图计算两个日期之间的差异,或者更具体地说,在同一天的几个小时之间的差异,这样我就可以得到有人进入时钟并计算出他们当天工作的小时数。

我使用日期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

我在做什么错?

回答

1

有一个不正确的分析正在进行,因为你只想得到在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. ​​
+0

很有效,直到我从窗体'this.myForm.value.startTime'得到值,然后返回'NaN'。我甚至尝试'this.myForm.value.startTime作为字符串'没有运气。 – timgavin

+1

@timgavin为什么不只是'this.myForm.value.startTime = this.myForm.value.startTime | “00:00”',这样虚假值就被默认值覆盖了! –

+0

修好了!谢谢:) – timgavin

0

我认为这真的很简单,如果你有两个Date对象,以获得差异从其减去Date.prototype.getTime(所以不要dateFns格式化尚)

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

您还可以详谈,Math.round(minutes)

希望它有帮助:)

+0

此方法:'VAR端=新日期(this.myForm.value.endTime) '给我'NaN'和这个方法:'var start = this.myForm.value.startTime;'给我这个:'ERROR TypeError:start.getTime不是一个函数'。 – timgavin