我一直在使用moment.js库计算两次总小时,分钟和秒。我遇到的问题是计算不能识别它是一天并返回比那里更多的小时。我给你举个例子:
我想知道21:00
和06:00
之间有多少小时,答案是9
,但计算会带回-15
,这在技术上也是正确的。我需要告诉它应该用一天来计算这个值。如果我使用DateTime选择器,我可以让它工作,但我不想使用它,因为用户只需要提供时间。
我的应用程序使用KendoUI for MVC和moment.js,moment.duration.format.js和moment.range.js
这是我的代码,它将返回-15
@(Html.Kendo().TimePicker().Name("start").Value("21:00"))
@(Html.Kendo().TimePicker().Name("end").Value("06:00"))
<button class="btn btn-default btn-success" onclick="calc()">Plot</button>
以下是适用于此的JavaScript。
function calc() {
window['moment-range'].extendMoment(moment);
console.clear();
var dformat = "HH:mm:ss";
var start = $("#start").data("kendoTimePicker").value();
var end = $("#end").data("kendoTimePicker").value();
var startTime = moment(kendo.toString(start));
var endTime = moment(kendo.toString(end));
var duration = moment.duration(endTime.diff(startTime));
var hours = parseInt(duration.asHours());
console.log(hours);
}
如果我们将此更改为使用DateTimePicker
,则会理解有一天并计算9
小时。那么我该如何解决这个问题呢?如何在不使用日期时间选择器的情况下实现此目的?我可以moment.js
startof
天或某事吗?
答案 0 :(得分:0)
感谢@VincenzoC,我设法解决了这个问题。这是检查结束时间是否在开始时间之前的代码,如果是,则添加一天。这意味着产生的时间是准确的。
var startTime = moment(start);
var endTime = moment(end);
if (endTime.isBefore(startTime))
{
endTime.add(1, 'd');
}
//
//After the above condition has been passed, calculate the difference
var duration = moment.duration(endTime.diff(startTime));
//
//Any format you want
console.log(duration.format("HH"))