2015-10-02 143 views
0

希望有人能帮助我。我有一个表单,我需要用户输入事件的开始时间和结束时间。一旦他们输入了信息,他们将手动输入2日期时间之间的持续时间。我试图用jQuery自动化这个过程,并得到一个叫做时刻http://momentjs.com/的插件。我希望这会让我更容易计算出2个日期时间,但我必须承认,我没有太多的精通javascript的jquery来理解它如何一起来。计算2日期和时间之间的小时和分钟

在侧面说明以及我需要的持续时间字段只能计算,如果它是空的。我创建了一个jsfiddle http://jsfiddle.net/FLhpq/2044/。这将是我能够复制我的场景中最接近的。这是我迄今为止的代码。

$(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'); 
});  
+0

也许这里的答案会有帮助吗? http://stackoverflow.com/questions/13903897/javascript-return-number-of-days-hours-minutes-seconds-between-two-dates (可能的复制?) –

+0

的可能的复制[获取在两个日期之间的时间差秒](http://stackoverflow.com/questions/13894632/get-time-difference-between-two-dates-in-seconds) – ochi

回答

2

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

我把下面的小提琴放在一起,我认为你想要做的事情; jsfiddle.net/...

$(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); 
     } 
    }); 

在你原来的小提琴。没有ID“持续时间”的元素。另外,对于抓取元素,请尝试使用选择器的类名称。我在输入中添加了一些简单的类,使得使用jQuery更容易一些。

从这里开始,如果您还想额外显示分钟/秒,您可以使用某些内置功能(例如to)的某些内置功能来更改持续时间逻辑。

我相信像下面这样的东西;

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

希望这可以帮助你!

+0

你也可以人性化输入值:'$输入。 val(moment.duration(duration,'hours')。humanize());' –

+0

是的。没有试图增强OP的实现。只是指出搭售到用户界面;) – jh3y

+0

谢谢你们这工作完美,我近距离哈哈。 –

0

你应该看看 this

  var a = moment([2007, 0, 28]); 
     var b = moment([2007, 0, 29]); 
     a.to(b);      // "in a day" 

或者

  var a = moment([2007, 0, 29]); 
      var b = moment([2007, 0, 28]); 
      a.diff(b, 'days') // 1 
0

这将显示小时(和分钟),并显示它,如果duration字段为空:

$(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'); 
    } 
}); 

如果用户改变值。这还更新duration输入字段。

你可以在这里看到一个工作的jsfiddle:

http://jsfiddle.net/divspace/9x0s01oy/

相关问题