Reputation: 59634
One way to create calendars in HTML pages is to create monthly HTML tables and fill them manually. But, is there a plugin that would fill them automatically, by providing the month value for example?
I am not looking to register events on calendars, I just want to display 12 tables (one for each month) on a html page. No frills.
Upvotes: 2
Views: 11783
Reputation: 1320
For those coming after, I've taken @Stano 's answer and amended it to draw any month in any year, and label months and days according to locale.
Note that this moves the arrays of month names, day names, and day numbers to outside the scope of the function itself. It also assumes that you have a global parameter _locale
which identifies the language to use - obviously this is easy to overcome if not.
I've also removed the checking for the current date - both to clarify what is going on, and also to speed the whole process along. I feel you can just grab what you need via the (new) data attributes once after you've drawn your calendar, rather than checking every single date in every month drawn.
You would feed the function the human-read month number (e.g. '1' for January) and the year.
var _month_names = {},
_day_names = {},
_num_days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
_month_names.en_GB = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
_day_names.en_GB = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
function draw_monthly_calendar(month_num, year)
{
var arr_month_num = parseInt(month_num) - 1;
year = parseInt(year);
var date_obj = new Date(month_num + ' 1,' + year);
var days_in_feb = ( (year % 100 !== 0) && (year % 4 === 0) || (year % 400 === 0) ) ? 29 : 28,
num_days_in_set_month = (arr_month_num === 1) ? days_in_feb : _num_days_in_months[arr_month_num];
var first_day_in_month = date_obj.getDay(),
calendar_content = '';
var tmp = first_day_in_month;
while(tmp > 0)
{
calendar_content += '<td class="prev-month-day"></td>';
tmp--;
}
tmp = first_day_in_month;
var i = 1;
while(i <= num_days_in_set_month)
{
if (tmp > 6)
{
tmp = 0;
calendar_content += '</tr><tr class="week">';
}
var ymd_str = year + '-' + lpad(month_num, 0, 2) + '-' + lpad(i, 0, 2);
calendar_content += '<td class="day" data-date="' + ymd_str + '">' + i + '</td>';
tmp++;
i++;
}
var ym_str = year + '-' + lpad(month_num, 0, 2);
var calendar = '<table class="month" data-date="' + ym_str + '"><tr class="month-label-ctn"><th class="month-label" colspan="7">' + _month_names[_locale][arr_month_num] + ' ' + year + '</th></tr>';
calendar+= '<tr class="day-label-ctn">';
$.each(_day_names[_locale], function(i, name)
{
calendar+= '<td class="day-label">' + name + '</td>';
});
calendar+= '<tr class="week">' + calendar_content + '</tr></table>';
return calendar;
}
Upvotes: 0
Reputation: 8949
All credits go to author of this tutorial. It can be easily enhanced to 12months calendar:
function calendar(month) {
//Variables to be used later. Place holders right now.
var padding = "";
var totalFeb = "";
var i = 1;
var testing = "";
var current = new Date();
var cmonth = current.getMonth(); // current (today) month
var day = current.getDate();
var year = current.getFullYear();
var tempMonth = month + 1; //+1; //Used to match up the current month with the correct start date.
var prevMonth = month - 1;
//Determing if Feb has 28 or 29 days in it.
if (month == 1) {
if ((year % 100 !== 0) && (year % 4 === 0) || (year % 400 === 0)) {
totalFeb = 29;
} else {
totalFeb = 28;
}
}
// Setting up arrays for the name of the months, days, and the number of days in the month.
var monthNames = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thrusday", "Friday", "Saturday"];
var totalDays = ["31", "" + totalFeb + "", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"];
// Temp values to get the number of days in current month, and previous month. Also getting the day of the week.
var tempDate = new Date(tempMonth + ' 1 ,' + year);
var tempweekday = tempDate.getDay();
var tempweekday2 = tempweekday;
var dayAmount = totalDays[month];
// After getting the first day of the week for the month, padding the other days for that week with the previous months days. IE, if the first day of the week is on a Thursday, then this fills in Sun - Wed with the last months dates, counting down from the last day on Wed, until Sunday.
while (tempweekday > 0) {
padding += "<td class='premonth'></td>";
//preAmount++;
tempweekday--;
}
// Filling in the calendar with the current month days in the correct location along.
while (i <= dayAmount) {
// Determining when to start a new row
if (tempweekday2 > 6) {
tempweekday2 = 0;
padding += "</tr><tr>";
}
// checking to see if i is equal to the current day, if so then we are making the color of that cell a different color using CSS. Also adding a rollover effect to highlight the day the user rolls over. This loop creates the actual calendar that is displayed.
if (i == day && month == cmonth) {
padding += "<td class='currentday' onMouseOver='this.style.background=\"#00FF00\"; this.style.color=\"#FFFFFF\"' onMouseOut='this.style.background=\"#FFFFFF\"; this.style.color=\"#00FF00\"'>" + i + "</td>";
} else {
padding += "<td class='currentmonth' onMouseOver='this.style.background=\"#00FF00\"' onMouseOut='this.style.background=\"#FFFFFF\"'>" + i + "</td>";
}
tempweekday2++;
i++;
}
// Outputing the calendar onto the site. Also, putting in the month name and days of the week.
var calendarTable = "<table class='calendar'> <tr class='currentmonth'><th colspan='7'>" + monthNames[month] + " " + year + "</th></tr>";
calendarTable += "<tr class='weekdays'> <td>Sun</td> <td>Mon</td> <td>Tues</td> <td>Wed</td> <td>Thurs</td> <td>Fri</td> <td>Sat</td> </tr>";
calendarTable += "<tr>";
calendarTable += padding;
calendarTable += "</tr></table>";
document.getElementById("calendar").innerHTML += calendarTable;
}
function go12() {
for (i = 0; i < 12; i++) {
calendar(i);
}
}
if (window.addEventListener) {
window.addEventListener('load', go12, false);
} else if (window.attachEvent) {
window.attachEvent('onload', go12);
}
http://jsfiddle.net/r4FAM/3/show/
Upvotes: 5
Reputation: 10904
After a simple Google search for the keyword "html calendar maker"
I got this on the top
http://freehtmlcalendar.com/
Try that, it might help
Upvotes: 0