2017-08-07 78 views
0

我在維護一個使用jQuery UI Timepicker並試圖排查錯誤的應用程序。jQuery UI Timepicker關閉1分鐘

基本上,這是如何重新創建它:

有2個timepickers,開始時間結束時間
1.在開始時,選擇上午6:00(從小時區
2.結束時,從小時區域
3.從分鐘面積回去的啓動時間,並選擇00選擇下午12:00(

然後運行一些代碼以確定流逝的時間,以分鐘爲單位。該代碼是:

function setDuration() { 

     var $startTime = $(".field.times input[name$='StartTime']"); 
     var $endTime = $(".field.times input[name$='EndTime']"); 

     var $durationHours = $(".field.duration input[name$='DurationHours']"); 
     var $durationMinutes = $(".field.duration input[name$='DurationMinutes']"); 

     if ($startTime.val() != "" && $endTime.val() != "") { 

      var startTime = $startTime.timepicker ? $startTime.timepicker('getTimeAsDate') : Date.parse('01 jan 01 ' + $startTime.val(), "hh:mm tt"); 
      var endTime = $endTime.timepicker ? $endTime.timepicker('getTimeAsDate') : Date.parse('01 jan 01 ' + $endTime.val(), "hh:mm tt"); 
      var duration = (endTime - startTime)/1000/60; 

      //check whether spanning multiple days 
      if (startTime > endTime) { 
       duration = duration + (60 * 24); 
      } 

      $durationHours.val(Math.floor(duration/60)); 
      $durationMinutes.val(duration % 60); 
     } 
    } 

我發現完成步驟1和2後,一切都很好。
但是,如果我完成步驟3,endTime本地變量被分配一個日期對象,它的時間分量爲11:59而不是12:00。

關閉1分鐘。

如果我然後去結束時間選擇器,並從分鐘區域選擇了00,因爲我與開始時間選擇器,再經過時間的權利本身一樣。

作爲一個有趣的觀察調試時,兩個時間選擇器在步驟1和2之後1分鐘。也就是說,它們在5:59和11:59。經過的時間是正確的,因爲差別很重要。但是正如所說的,只要用戶從小時區域中選擇00,它似乎「對其自身」爲該選取器,差異超出1分鐘(直到其他選擇器完成相同的事情)。

JavaScript日期很難!幫助會很好。

回答

0

是的,想通了。我想這是一個有見解的組件,它認爲用戶必須從分鐘區域中選擇一個分鐘數字。因爲如果他們不這樣做,分鐘將是-1。
不夠公平。

要修復這個bug,在ONSELECT處理程序中,我寫了類似這樣的代碼:

$('#timepicker').timepicker({ 
     onSelect: function (time, inst) {     
      if (inst.minutes < 0) 
       inst.minutes = 0; 
     } 
}); 

在我們的應用程序,如果他們不選擇「00」或任何其他分鐘,這將是推測爲0.