如何使用moment.js计算从PM到AM的小时数?

时间:2017-11-14 16:02:00

标签: javascript datetime momentjs

我一直在使用moment.js库计算两次总小时,分钟和秒。我遇到的问题是计算不能识别它是一天并返回比那里更多的小时。我给你举个例子:

我想知道21:0006: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天或某事吗?

1 个答案:

答案 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"))