【问题标题】:How do I calculate hours from PM to AM using moment.js?如何使用 moment.js 计算从 PM 到 AM 的小时数?
【发布时间】:2017-11-14 16:01:59
【问题描述】:

我一直在使用 moment.js 库计算两次之间的总小时、分钟和秒。我遇到的问题是计算没有认识到这是一天并且返回的时间比那里的时间多。我给你举个例子:

我想知道21:0006:00之间的时间是多少小时,答案是9,但是计算出来的是-15,这在技术上也是正确的。我需要告诉 moment 它应该用一天来计算这个值。如果我使用 DateTime 选择器,我可以让它工作,但我不想使用它,因为用户只需要提供一个时间。

我的应用程序将 KendoUI 用于 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.jsstartof day 什么的吗?

【问题讨论】:

  • 参见here,您正在获取当天的时刻对象,请使用isBeforeadd

标签: javascript datetime momentjs


【解决方案1】:

感谢@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"))

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 2022-01-19
    • 2018-05-03
    • 2021-11-15
    • 1970-01-01
    • 2022-10-04
    • 2019-05-22
    相关资源
    最近更新 更多