2012-11-08 122 views
2

我正在嘗試檢查mm.dd.yyyy格式的日期是否大於今天且小於今天起6個月後的日期。檢查範圍內的日期

這裏是我的代碼:

var isLinkExpiryDateWithinRange = function(value) { 
    var monthfield = value.split('.')[0]; 
    var dayfield = value.split('.')[1]; 
    var yearfield = value.split('.')[2]; 
    var inputDate = new Date(yearfield, monthfield - 1, dayfield); 
    var today = new Date();  
    today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); 
    alert(inputDate > today);//alert-> true 
    var endDate = today; 
    endDate.setMonth(endDate.getMonth() + 6); 
    alert(inputDate > today);//alert-> false 
    if(inputDate > today && inputDate < endDate) { 
     alert('1'); 
    } else { 
     alert('2');/always alert it 
    } 
} 

如果我執行isLinkExpiryDateWithinRange('12.08.2012')我希望它會顯示1,因爲這是該範圍內,但它顯示的是2。此外,第一警報顯示真實的,而第二個假。

任何人都可以請解釋發生了什麼?

回答

5

變化:

var endDate = today; 

到:

var endDate = new Date(today); 

參見對象如何引用和改變了職位here。有一些非常好的例子可以幫助解釋這個問題,特別是:

相反,情況是傳入的項目是按值傳遞的。 但是,通過值傳遞的項目本身就是一個參考。

JSFiddle example

5
function isLinkExpiryDateWithinRange(value) { 
    // format: mm.dd.yyyy; 
    value = value.split("."); 
    var todayDate = new Date(), 
     endDate = new Date(todayDate.getFullYear(), todayDate.getMonth() + 6, todayDate.getDate() +1); 
     date = new Date(value[2], value[0]-1, value[1]); 

    return todayDate < date && date < endDate; 
} 

isLinkExpiryDateWithinRange("12.24.2012"); // true 
isLinkExpiryDateWithinRange("12.24.2020"); // false 
+0

謝謝你的解決方案。 –

2

以下功能檢查,如果選擇的日期是內從今天5天。使用的日期格式是「DD-MM-YYYY」,您可以通過更改value.split(' - ')[1]順序和分割字符來使用任何格式。

function showMessage() { 
     var value = document.getElementById("invoiceDueDate").value; 
     var inputDate = new Date(value.split('-')[2], value.split('-')[1] - 1, value.split('-')[0]); 
     var endDate = new Date(); 
     endDate.setDate(endDate.getDate() + 5);// adding 5 days from today 
     if(inputDate < endDate) { 
      alert("If the due date selected for the invoice is within 5 days, and express settlement fee will apply to this transaction."); 
     } 

    }