检查范围内的日期

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.此外,第一个警报显示为真,第二个警告显示为假.

有人可以解释一下发生了什么吗?

Cha*_*ase 8

更改:

var endDate = today;
Run Code Online (Sandbox Code Playgroud)

至:

var endDate = new Date(today);
Run Code Online (Sandbox Code Playgroud)

有关如何引用和更改对象,请参阅此处的帖子.有一些非常好的例子可以帮助解释这个问题,特别是:

相反,情况是传入的项目是按值传递的.但是通过值传递的项本身就是一个引用.

JSFiddle示例


and*_*lrc 6

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)