Calendar

View the Project on GitHub





Calendar Calculation



Relations between calendar units




Year: 



Months:

12 MONTH NAMES var additional_days = ( leap_year(y) ) ? 2 : 1;

Weeks:

52 + ADDITIONAL DAYS var calendar_weeks = 52; // Default /** * To see different pure arithmetic solutions, refer to chapter `Day` */ var new_year = new Date(y, 0, 1); var new_year_day_index = new_year.getDay(); // NEW YEAR DAY INDEX if ( (NEW YEAR DAY INDEX == 3 && leap_year(y)) || NEW YEAR DAY INDEX == 4 ) calendar_weeks = 53;

Calendar Weeks:

CALENDAR WEEKS var days = ( leap_year(y) ) ? 366 : 365;

DAYS:

AMOUNT DAYS
Year: 		Month (zero based): 



var month_name = months[m];

Month name:

MONTH NAME var amount_days = last_date_of_month(y, m);

Days in MONTH NAME y:

AMOUNT DAYS /** * To see different pure arithmetic solutions, refer to chapter `Day` */ var tmp, i; var first = new Date(y, m, 1); var offset = (first.getDay() || 7) - 1; // OFFSET var amount_days_month_before = last_date_of_month(y, (m - 1)); // AMOUNT DAYS MONTH BEFORE var start = []; var end = []; var tmp2 = 1 - OFFSET; while ( (tmp2 + 7) <= amount_days ) tmp2 += 7; var counter = 0; for ( i = 0; i < 7; i++ ) { tmp = i - OFFSET + 1; if ( tmp > 0 ) start.push(tmp); else start.push(AMOUNT DAYS MONTH BEFORE + tmp); tmp = i + TMP2; if ( tmp <= amount_days ) end.push(tmp); else end.push(++counter); }

First (partial) week:

FIRST WEEK

Last (partial) week:

LAST WEEK
Year: 		Month (zero based): 		Day: 



var month_name = months[m];

Month name:

MONTH NAME var date = new Date(y, m, d); var day_index = date.getDay(); // DAY INDEX var day_name = days[DAY INDEX];

Day name:

DAY NAME day_index = weekday(y, m, d); // DAY INDEX day_name = days[DAY INDEX];

Day name:

DAY NAME /** * The hard and long way * (with useful side-effects) */ var reference_year = Math.floor(y / 400) * 400; // REFERENCE YEAR var distance = date_distance(REFERENCE YEAR, 0, 1, y, m, d) - 1; // DISTANCE day_index = (DISTANCE + DAY_INDEX_0_0_1) % 7; // DAY INDEX day_name = days[DAY INDEX];

Day name:

DAY NAME var day_of_year = date_distance(y, 0, 1, y, m, d);

Day of year:

DAY OF YEAR var new_year_distance = date_distance(reference_year, 0, 1, y, 0, 1) - 1; // NEW YEAR DISTANCE // Sunday must be `7`, not `0`! var new_year_index = ((NEW YEAR DISTANCE + DAY_INDEX_0_0_1) % 7) || 7; // NEW YEAR INDEX var calendar_week = (NEW YEAR INDEX < 5) ? Math.ceil(day_of_year / 7) : Math.floor(day_of_year / 7);

Calendar week:

CALENDAR WEEK