我正在尝试检查格式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.此外,第一个警报显示为true而第二个警告显示为false。
有人可以解释一下发生了什么吗?
答案 0 :(得分:6)
更改:
var endDate = today;
到:
var endDate = new Date(today);
有关如何引用和更改对象的信息,请参阅帖子here。有一些很好的例子可以帮助解释这个问题,特别是:
相反,情况是传入的项目是按值传递的。 但是通过值传递的项本身就是一个引用。
答案 1 :(得分: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
答案 2 :(得分: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.");
}
}