2015-10-02 184 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/

相關問題