2016-01-20 98 views
1

我想要檢索用戶使用bootstrap datepicker輸入的兩個日期之間的月份差異。除此之外,我還試圖將第二個值(date2)替換爲用戶單擊計算按鈕時月份的差異。當試圖在這方面的工作我的代碼似乎沒有工作...使用jquery以(mm/dd/yyyy)格式獲取兩個日期之間的月差異

這是我到目前爲止有:

$('#clickMe').click(function() { 
    var date1 = $('#firstPayDate'); 
    var date2 = $('#loanTrm'); 
    var timeDiff = Math.abs(date2.getTime() - date1.getTime()); 
    var diffMonths = Math.ceil(timeDiff/(1000 * 3600 * 24)); 
    date2.val(date2.val().replace(diffMonths)); 
}); 

這裏是什麼,我試圖完成一個畫面顯示:

enter image description here

我想取這兩個條目之間(到期日 - 首付款日期)差異

enter image description here 我試圖讓用戶單擊「計算」按鈕時發生的計算,月份中的差異將替換爲在「到期日期」中輸入的值。

任何幫助將不勝感激!

+0

沒有替換字符串出現提供給'.replace()''在date2.val()代替(diffDays) '? – guest271314

+1

我相信date1和date2只是一個HTMLElement的jQuery包裝器。你爲什麼期待Date對象?你能提供一個你想要完成的事情嗎? – Microfed

+1

對於任何日期的東西,我總是轉向http://momentjs.com/ –

回答

2

人類的日曆不利於簡單的數學 - 幸運的是,javascript提供了一個Date對象,它爲我們完成了大部分的骯髒工作。

這會將日期字符串轉換爲日期對象(在輸入字段的內容上覆蓋任何格式或驗證問題)。請注意,在特定情況下,由於您打算用幾個月而不是#loanTrm的值代替日期,如果用戶點擊「計算」兩次,否則會破壞;糾正不止一個編碼問題的用戶界面問題,所以我會忽略它暫時):

var date1 = new Date($('#firstPayDate').val()); 
var date2 = new Date($('#loanTrm').val()); 
var datediff = date2 - date1; 

(如尖在下面的註釋中,還要注意Date使用用戶的區域設置來確定預期的日期格式:如果你總是以mm/dd/yy顯示日期,那麼你可能不應該這麼做,因爲很多時候e世界使用dd/mm/yy。你或者需要根據用戶區域設置格式化輸入字段,或者用更明確的new Date(year, month, day, hours, minutes, seconds, milliseconds)而不是我上面顯示的字符串快捷鍵來構建你的日期。)(就像我說的:日期很難!等到你嘗試時區,它們更有趣)

datediff現在包含兩個日期之間的實際差異(以毫秒爲單位)。

接下來會發生什麼取決於「月份的差異」的確切含義,因爲月份並不總是相同的長度。

如果你不關心精度,假設每個月有三十天的時間並將datediff除以(1000 * 60 * 60 * 24 * 30),可以得到一個近似值可能接近的近似值。如果你關心精度,你已經走出了自己的領域,可能應該使用專門用於這種數學的一個庫(當然是好的)。

(有很多其他SO問題涉及這種類型的東西;任何依賴於字符串匹配而不是Date()的答案都會至少每四年出現一次錯誤,並且可能更常出現這種情況。)

+0

每四年只發生一次的問題是一個非常有趣的問題,試圖解決。如果諷刺不夠厚,真的很有趣的問題。 – Neil

+0

如果日期總是以mm/dd/yyyy打印,那麼對於使用不同格式的區域設置的用戶,'New Date()'保證會失敗。 – coladict

+0

@coladict:非常好的一點!我會將其添加到答案中 –

-1

嘗試刪除你的價值

date2.val(); 

然後將值賦給輸入。

date2.val(diffMonths); 
-2

試試這個。您可以檢查代碼段中的月份差異。

$(function() { 
 
// you can change the format to the way you want 
 

 
         $("#datepicker1").datepicker({ 
 
          yearRange: "-20:+100", 
 
          changeMonth: true, 
 
          changeYear: true, 
 
          dateFormat: "d-M-y" 
 
         }); 
 
       
 

 

 
         $("#datepicker2").datepicker({ 
 
          yearRange: "-20:+100", 
 
          changeMonth: true, 
 
          changeYear: true, 
 
          dateFormat: "d-M-y" 
 
         }); 
 
}); 
 

 

 
function monthDiff(d1, d2) { 
 
    var months; 
 
    months = (d2.getFullYear() - d1.getFullYear()) * 12; 
 
    months -= d1.getMonth(); 
 
    months += d2.getMonth(); 
 
    return months <= 0 ? 0 : months; 
 
} 
 

 
function cal() { 
 
d1 = new Date($("#datepicker1").val()); 
 
d2 = new Date($("#datepicker2").val()); 
 
alert("The difference between two dates is: " +monthDiff(d1, d2)); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
 
<p>Date1: <input type="text" id="datepicker1"></p> 
 
<p>Date2: <input type="text" id="datepicker2"></p> 
 
<button id="calculate" onclick="cal()"> Calculate </button>

0

以下邏輯將獲得差異月

(endDate.getFullYear()*12+endDate.getMonth())-(startDate.getFullYear()*12+startDate.getMonth()) 
相關問題