Tap*_*ose 4 javascript date range
我正在尝试检查格式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
}
}
Run Code Online (Sandbox Code Playgroud)
如果我执行isLinkExpiryDateWithinRange('12.08.2012')我希望它将显示1,因为它在范围内,但它显示2.此外,第一个警报显示为真,第二个警告显示为假.
有人可以解释一下发生了什么吗?
更改:
var endDate = today;
Run Code Online (Sandbox Code Playgroud)
至:
var endDate = new Date(today);
Run Code Online (Sandbox Code Playgroud)
有关如何引用和更改对象,请参阅此处的帖子.有一些非常好的例子可以帮助解释这个问题,特别是:
相反,情况是传入的项目是按值传递的.但是通过值传递的项本身就是一个引用.
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
Run Code Online (Sandbox Code Playgroud)