2014-01-12 223 views
5

我正在試圖計算jquery中2個日期時間字符串之間的時間差。如何計算jQuery中2個日期時間值之間的時間差

我有2個輸入,其中輸入字符串是這樣的「1:00 PM」,第二個「3:15 PM」我想知道時間差。所以上面的例子中,我想顯示3.15

我所做的是

  1. 轉換時間爲24小時制。因此「1:00 PM」變成了「13:00:00」
  2. 我追加新的時間日期,像這樣新的日期(「1970-1-1 13:00:00」)
  3. 然後我計算像相差這麼

代碼:

var total = Math.round(((new Date("1970-1-1 " + end_time) - new Date("1970-1-1 " + start_time))/1000/3600) , 2) 

但總總是返回整數和小數不那麼「下午1:00」和「3:15 PM」之間的差爲2不是2.15 。

我也試過這種

$(function(){ 

$('#to_ad,#from_ad').change(function(){ 
    $('#total_ad').val(getDiffTime()); 
}); 

function fixTimeString(time){ 
    var hours = Number(time.match(/^(\d+)/)[1]); 
    var minutes = Number(time.match(/:(\d+)/)[1]); 
    var AMPM = time.match(/\s(.*)$/)[1]; 
    if(AMPM == "PM" && hours<12) hours = hours+12; 
    if(AMPM == "AM" && hours==12) hours = hours-12; 
    var sHours = hours.toString(); 
    var sMinutes = minutes.toString(); 
    if(hours<10) sHours = "0" + sHours; 
    if(minutes<10) sMinutes = "0" + sMinutes; 
    return sHours + ':' + sMinutes + ':00'; 
} 


function getDiffTime(){ 
    var start_time = fixTimeString($('#from_ad').val()); 
    var end_time = fixTimeString($('#to_ad').val()); 


var start = new Date("1970-1-1 " + end_time).getTime(), 
    end = new Date("1970-1-1 " + start_time).getTime(); 

return parseInt(((start - end)/1000/3600, 10)*100)/100; 

} 

} 

但total_ad輸入沒有顯示,但整數值。

我該如何解決這個問題?

感謝

+0

[jquery的比較2倍(HTTP的可能重複: //sackoverflow.com/questions/4929604/comparing-2-times-with-jquery) – isherwood

+0

'3.15 - 1 = 2.15'? – adeneo

+0

jQuery從哪裏進入圖片?這不是簡單的JavaScript嗎? – biziclop

回答

0

Math.round四捨五入爲最接近的整數乘除,而不是

var start = new Date("1970-1-1 " + start_time).getTime(), 
    end = new Date("1970-1-1 " + end_time).getTime(); 

var total = (parseInt(((start-end)/1000/3600)*100, 10))/100; 

FIDDLE

當你花時間15:15:00和13:00:00減去,你剩下的時間是2.15小時,而不是3.15,即使沒有確定只有兩位小數,這個例子也會返回2.15,但在其他情況下可能不是這樣。
你也可以使用toFixed(2),但這會讓你有3.00,而不是3等

+0

由於某些原因,這不適用於我。請檢查我的問題,並添加了我正在使用的代碼。謝謝 – Mike

+0

在使用它們之前什麼格式是「start_time」和「end_time」?初始化後,什麼格式是「全部」?它是一個字符串還是毫秒數?請提供更多細節。 – BrianLegg

+0

@BrianLegg - 讓我們假設OP不再有這個代碼的問題,已經兩年了? – adeneo

0

這是我如何計算:

calculateDiff(); 

function calculateDiff(){ 
     _start = "7:00 AM"; 
     _end = "1:00 PM"; 

     _start_time = parseAMDate(_start); 
     _end_time = parseAMDate(_end); 

     if (_end_time < _start_time){ 
      _end_time = parseAMDate(_end,1); 
     } 

     var difference= _end_time - _start_time; 

     var hours = Math.floor(difference/36e5), 
      minutes = Math.floor(difference % 36e5/60000); 
     if (parseInt(hours) >= 0){ 
      if (minutes == 0){ 
       minutes = "00"; 
      } 
      alert(hours+":"+minutes); 
     } 
    } 

    function parseAMDate(input, next_day) { 

     var dateReg = /(\d{1,2}):(\d{2})\s*(AM|PM)/; 

     var hour, minute, result = dateReg.exec(input); 

     if (result) { 
      hour = +result[1]; 
      minute = +result[2]; 

      if (result[3] === 'PM' && hour !== 12) { 
       hour += 12; 
      } 
     } 
     if (!next_day) { 
      return new Date(1970, 01, 01, hour, minute).getTime(); 
     }else{ 
      return new Date(1970, 01, 02, hour, minute).getTime(); 
     } 
    } 
相關問題