Check if a date within in range

2019-05-14 13:38发布

I am trying to check if a date of format mm.dd.yyyy is greater than today and less than the date after 6 months from today.

Here is my code:

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
    }
}

If I execute isLinkExpiryDateWithinRange('12.08.2012') I wish it will show 1 as this is within the range, but it is displaying 2. Moreover the first alert is showing true and the second one false.

Can anyone please explain what is happening?

3条回答
2楼-- · 2019-05-14 14:18
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
查看更多
We Are One
3楼-- · 2019-05-14 14:26

Change:

var endDate = today;

to:

var endDate = new Date(today);

See the posts here for how objects are referenced and changed. There are some really good examples that help explain the issue, notably:

Instead, the situation is that the item passed in is passed by value. But the item that is passed by value is itself a reference.

JSFiddle example

查看更多
做自己的国王
4楼-- · 2019-05-14 14:36

Below function checks if date selected is within 5 days from today. Date format used is "DD-MM-YYYY", you can use any format by changing value.split('-')[1] order and split character.

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.");
        }

    }
查看更多
登录 后发表回答