Suffii
Suffii

Reputation: 5784

How to Populate An Array of Month Number In jQuery - Javascript

Can you please take a look at this demo and let me know how I can dynamically populate the number of each month for current year in jQuery or JavaScript?

var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var daysInMonth = [];
var d = new Date();
var n = d.getMonth();

for (var i = 0; i < monthNames.length; i++) {
    daysInMonth.push(d.getMonth());
}
console.log(daysInMonth);

Upvotes: 0

Views: 1151

Answers (2)

scunliffe
scunliffe

Reputation: 63580

@Sam Battat's answer works too, but for a simple snippet of code that works on any year when called you could try this:

var thisDay = new Date();
var thisYear = thisDay.getYear();
var feb29th = new Date(thisYear, 1, 29);
var febDays = ((feb29th.getMonth() === 1) ? 29 : 28);
var dayCounts = [31,febDays,31,30,31,30,31,31,30,31,30,31];

Notes:

  • The number of days is hard coded for all months except February since they don't change
  • The feb29th variable above will actually become March 1st on years that don't have 29 days (e.g. non-leap years) and thus the month won't be "1"... defaulting the number of days back to 28

Update:

After running this perf test http://jsperf.com/leap-year-check it has become apparent that the "crafty" check for a leap year performance is nowhere near as good as basic math checks.

Thus I'd consider this to be even more efficient.

var thisDay = new Date();
var thisYear = thisDay.getYear();
var febDays = 28;
if((thisYear % 4 == 0) && (thisYear % 100 != 0) || (thisYear % 400 == 0)){
  febDays = 29;
}
var dayCounts = [31,febDays,31,30,31,30,31,31,30,31,30,31];

Upvotes: 1

Sam Battat
Sam Battat

Reputation: 5745

var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var daysInMonth = [];

for (var i = 0; i < monthNames.length; i++) {
    var year = 2014;
    var month = new Date(monthNames[i] + " 01 "+ year).getMonth() + 1;
    daysInMonth.push(new Date(year, month, 0).getDate());
}
console.log(daysInMonth);

DEMO http://jsfiddle.net/0mj2cxmt/7/

Upvotes: 1

Related Questions