如何获取 Javascript 中两个日期选择器值之间的时间跨度?

How to get the time span between two date picker values in Javascript?

我在 HTML5 表单中添加了两个 Bootstrap 日期时间选择器。到目前为止,我可以使用控件的更改事件捕获每个选择器的 DateTime 值。

现在我有一个情况需要将两个 DateTime 选择器之间的时间跨度差异存储为一个变量。

我确实遇到过与此类似的示例 ask here。但是我下面的简短实现会在实际时间选择器值更改时提醒值 "Nan" 而不是预期的时间跨度差异。

问题:

如何计算 Javascript 或 JQuery 中两个日期选择器值之间的时间跨度?

代码要点:

var start;
var actual;

$("#OutageStartDisplay").on("dp.change", function (e) {
    start = $('#OutageStart').val(moment(e.date).format());
});


//On change of the ActualDisplay datetime picker 
//update's the Actual hidden field with the datetime.
$("#ActualDisplay").on("dp.change", function (e) {
    actual = $('#Actual').val(moment(e.date).format());

    //If the actual is set, calculate the outage duration
    var timeDiff = Math.abs(start - actual);
    var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
    alert(diffDays);

});

由于您使用的是时刻,因此您可以使用 moment.diff 来获取时差。

您的代码似乎也有点错误,当您执行 $("whatever").val(something) 时,您将 "whatever" 的值设置为 something 并且它 returns $("whatever"),不是价值。因此,您正试图从另一个 JQuery 对象中减去一个 JQuery 对象。但即使它返回了 val,你的 val 也是一个字符串——你也不能减去它。

所以你可能想要这个:

var start;
var actual;

$("#OutageStartDisplay").on("dp.change", function (e) {
    start = moment(e.date);
    $('#OutageStart').val(start.format());
});

$("#ActualDisplay").on("dp.change", function (e) {
    actual = moment(e.date);
    $('#Actual').val(actual.format());

    //If the actual is set, calculate the outage duration
    alert(actual.diff(start));
});