Alok Jain
Alok Jain

Reputation: 3518

Javascript repeating days counter

I need a JavaScript function that returns the number of days remaining from a particular date of every year.

I found the following code, but how can I make it repeatable for every year, instead of changing the year in the function manually?

function daysUntil(year, month, day) {
  var now = new Date(),
      dateEnd = new Date(year, month - 1, day), // months are zero-based
      days = (dateEnd - now) / 1000/60/60/24;   // convert milliseconds to days

  return Math.round(days);
}

daysUntil(2013, 10, 26);

I think my question above is not clear enough, i need to show days remaining in 26th October. So this starts again every year on 27th October. I don't need a loop for that.

Upvotes: 0

Views: 273

Answers (1)

nnnnnn
nnnnnn

Reputation: 150080

"how can i make it repeatable for every year, instead of changing the year in function manually?"

Well you can't do literally every year to infinity, but you can easily add a loop to get a specific range of years:

var d;
for (var y = 2013; y < 2099; y++) {
    d = daysUntil(y, 10, 26);
    // do something with d, e.g.,
    console.log(d);
}

UPDATE: You added this detail to your question:

"I think my question above is not clear enough, i need to show days remaining in 26th October. So this starts again every year on 27th October. I don't need a loop for that."

OK, that's still not very clear, but I think you're saying that your input would be just the day and month and you want to calculate the number of days until the next time that day/month rolls around, e.g., the number of days until your next birthday. If so, perhaps something like this:

function daysUntil(month, day) {
    var now = new Date(),
        currentYear = now.getFullYear(),
        dateEnd = new Date(currentYear, month - 1, day); // months are zero-based

    if (dateEnd - now < 0)  // have we already passed that date this year?
        dateEnd.setFullYear(currentYear + 1);

    return Math.ceil((dateEnd - now) / 1000/60/60/24);
}

console.log(daysUntil(10,11)); // 365           - results from today, Oct 11
console.log(daysUntil(10,26)); // 15
console.log(daysUntil(7,7));   // 269

Upvotes: 2

Related Questions