Javascript 计算两个日期和时间之间的小时和分钟

Javascript 计算两个日期和时间之间的小时和分钟,javascript,jquery,Javascript,Jquery,希望有人能帮我。我有一个表单,需要用户输入事件的开始时间和结束时间。输入信息后,他们将手动输入两个日期和时间之间的持续时间。我试图用jquery自动化这个过程,并得到了一个名为矩的插件。我希望它能让我更简单地计算2次约会时间,但我必须承认,我对javascript的jquery不太了解,无法理解它是如何结合在一起的 另一方面,我需要仅在duration字段为空时计算它。我创建了一个JSFIDLE。这将是我最接近复制我的场景的地方。这是我到目前为止的代码 $(document).ready(fun

希望有人能帮我。我有一个表单,需要用户输入事件的开始时间和结束时间。输入信息后,他们将手动输入两个日期和时间之间的持续时间。我试图用jquery自动化这个过程,并得到了一个名为矩的插件。我希望它能让我更简单地计算2次约会时间,但我必须承认,我对javascript的jquery不太了解,无法理解它是如何结合在一起的

另一方面,我需要仅在duration字段为空时计算它。我创建了一个JSFIDLE。这将是我最接近复制我的场景的地方。这是我到目前为止的代码

$(document).ready(function() {
    var start_time = $('input[title="start time"]').val();
    var end_time = $('input[title="End time"]').val();
    var d1 = moment(start_time, "YYYY-MM-DD HH:mm");
    var d2 = moment(end_time, "YYYY-MM-DD HH:mm");
    var duration = d2.diff(d1, 'hours')+1;
    var input = $('input[title="duration"]').val();
    if(input == ''){
         $('#duration').val('duration');
 });    
你应该看看


我相信你的计算是正确的。我认为这只是视觉执行

我为你想做的事准备了以下提琴

用你原来的小提琴。没有ID为“duration”的元素。同样对于抓取元素,请尝试使用选择器的类名。我向输入中添加了一些简单的类,以便使用jQuery更容易地获取它们

从现在开始,如果您还想额外显示分/秒,您可以使用momentjs的一些内置功能(如
)来更改持续时间逻辑

我相信下面这样的事情

duration = d1.to(d2) // RETURNS MOMENT

希望这对你有帮助

这将显示小时(和分钟),如果
持续时间
字段为空,则显示:

$(document).ready(function() {
    if($('#duration').val() === '') {
        updateDuration($('#start_time').val(), $('#end_time').val());
    }

    $('#start_time').on('change keyup', function() {
        updateDuration($('#start_time').val(), $('#end_time').val());
    });

    $('#end_time').on('change keyup', function() {
        updateDuration($('#start_time').val(), $('#end_time').val());
    });

    function updateDuration(startTime, endTime) {
        var ms = moment(endTime, 'YYYY/MM/DD HH:mm:ss').diff(moment(startTime, 'YYYY/MM/DD HH:mm:ss')),
            dt = moment.duration(ms),
            h  = Math.floor(dt.asHours()),
            m  = moment.utc(ms).format('mm');

        $('#duration').val(h + ' hours, ' + m + ' minutes');
    }
});
如果用户更改值,这也会更新
持续时间
输入字段

您可以在这里看到一个正在工作的JSFIDLE:


也许这里的答案会有所帮助?(可能重复?)也可以将输入值人性化:
$input.val(矩.duration(duration,'hours').humanize())当然可以。不尝试增强OP的实现。只需给出与UI绑定的指针;)
    $(document).ready(function() {
      var start_time = $('.start').val(),
        end_time = $('.end').val(),
        d1 = moment(start_time, "YYYY-MM-DD HH:mm"),
        d2 = moment(end_time, "YYYY-MM-DD HH:mm"),
        duration = d2.diff(d1, 'hours') + 1,
        $input = $('.duration');
      if ($input.val() === ''){
        $input.val(duration);
      }
   });
duration = d1.to(d2) // RETURNS MOMENT
$(document).ready(function() {
    if($('#duration').val() === '') {
        updateDuration($('#start_time').val(), $('#end_time').val());
    }

    $('#start_time').on('change keyup', function() {
        updateDuration($('#start_time').val(), $('#end_time').val());
    });

    $('#end_time').on('change keyup', function() {
        updateDuration($('#start_time').val(), $('#end_time').val());
    });

    function updateDuration(startTime, endTime) {
        var ms = moment(endTime, 'YYYY/MM/DD HH:mm:ss').diff(moment(startTime, 'YYYY/MM/DD HH:mm:ss')),
            dt = moment.duration(ms),
            h  = Math.floor(dt.asHours()),
            m  = moment.utc(ms).format('mm');

        $('#duration').val(h + ' hours, ' + m + ' minutes');
    }
});