5

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 を示し、2 番目のアラートは false を示しています。

誰が何が起こっているのか説明できますか?

4

3 に答える 3

8

変化する:

var endDate = today;

に:

var endDate = new Date(today);

オブジェクトの参照方法と変更方法については、こちらの投稿を参照してください。問題を説明するのに役立ついくつかの本当に良い例があります。特に:

代わりに、渡されたアイテムが値渡しされているという状況です。しかし、値渡しされる項目自体が参照です。

JSFiddle の例

于 2012-11-08T15:11:38.243 に答える
7
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
于 2012-11-08T15:12:24.403 に答える