UNPKG

eventcalendarjs

Version:

Makes creating your javascript calendar easier

700 lines (641 loc) 24.1 kB
exports.getMonth = function (date, calStartDay) { //get all details about current date, day, month and year var day = date.getDate(); var month = date.getMonth(); var year = date.getFullYear(); //get first day of month, last day of month and lenght of month var monthStart = new Date(year, month, 1); var monthEnd = new Date(year, month + 1, 1); var monthLength = Math.round((monthEnd - monthStart) / (1000 * 60 * 60 * 24)); //array to hold days of the week var weekday = new Array(7); weekday[0] = "Sunday"; weekday[1] = "Monday"; weekday[2] = "Tuesday"; weekday[3] = "Wednesday"; weekday[4] = "Thursday"; weekday[5] = "Friday"; weekday[6] = "Saturday"; //check what day of the week first day of the month is var firstDay = weekday[monthStart.getDay()]; //variable to hold how many weeks will be on calendar var numWeeks = 5; //set starting date for month on calendar if (firstDay == "Monday") { var startingDay = 1; //if the month starts on a monday and has less than 29 days then an week less is required on calendar if (monthLength < 29) { //change number of weeks to 6 numWeeks = 4; } } else if (firstDay == "Tuesday") { var startingDay = 2; } else if (firstDay == "Wednesday") { var startingDay = 3; } else if (firstDay == "Thursday") { var startingDay = 4; } else if (firstDay == "Friday") { var startingDay = 5; } else if (firstDay == "Saturday") { var startingDay = 6; //if the month starts on a saturday and has 31 days then an extra week is required on calendar if (monthLength > 30) { //change number of weeks to 6 numWeeks = 6; } } else if (firstDay == "Sunday") { var startingDay = 7; //if the month starts on a sunda and has 30 or more days then an extra week is required on calendar if (monthLength > 29) { //change number of weeks to 6 numWeeks = 6; } } //get first day of the week //first day of week = date - (day of week-1) to start week on mondays var w1 = 1; var w2 = w1 + 7; var w3 = w2 + 7; var w4 = w3 + 7; var w5 = w4 + 7; var w6 = w5 + 7; //get a day from each week var week1day = new Date(date.setDate(w1)); var week2day = new Date(date.setDate(w2)); var week3day = new Date(date.setDate(w3)); var week4day = new Date(date.setDate(w4)); var week5day = new Date(date.setDate(w5)); var week6day = new Date(date.setDate(w6)); var calendar = { firstDay: firstDay, monthLenght: monthLength, calendarWeeks: numWeeks }; calendar.week1 = getWeek(week1day, calStartDay); calendar.week2 = getWeek(week2day, calStartDay); calendar.week3 = getWeek(week3day, calStartDay); calendar.week4 = getWeek(week4day, calStartDay); if (numWeeks > 4) { calendar.week5 = getWeek(week5day, calStartDay); } if (numWeeks > 5) { calendar.week6 = getWeek(week6day, calStartDay); } return calendar; } function getWeek(date, calStartDay) { var day = date.getDate(); var month = date.getMonth(); var year = date.getFullYear(); //get first day of the week if(calStartDay == 0) { var d0 = date.getDate() - (date.getDay()); } else if (calStartDay == 1) { //first day of week = date - (day of week-1) to start week on mondays var d0 = date.getDate() - (date.getDay() - 1); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 6); } } else if (calStartDay == 2) { //first day of week = date - (day of week-2) to start week on tuesday var d0 = date.getDate() - (date.getDay() - 2); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 5); } } else if (calStartDay == 3) { //first day of week = date - (day of week-3) to start week on wednesday var d0 = date.getDate() - (date.getDay() - 3); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 4); } } else if (calStartDay == 4) { //first day of week = date - (day of week-4) to start week on thursday var d0 = date.getDate() - (date.getDay() - 4); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 3); } } else if (calStartDay == 5) { //first day of week = date - (day of week-5) to start week on friday var d0 = date.getDate() - (date.getDay() - 5); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 2); } } else if (calStartDay == 6) { //first day of week = date - (day of week+1) to start week on saturday var d0 = date.getDate() - (date.getDay() + 1); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() - 1); } } //get rest of the days of the week var d1 = d0 + 1; var d2 = d0 + 2; var d3 = d0 + 3; var d4 = d0 + 4; var d5 = d0 + 5; var d6 = d0 + 6; //create the date objects var monday = new Date(year, month, d0); var tuesday = new Date(year, month, d1); var wednesday = new Date(year, month, d2); var thursday = new Date(year, month, d3); var friday = new Date(year, month, d4); var saturday = new Date(year, month, d5); var sunday = new Date(year, month, d6); //get todays date var today = new Date(); var todayDay = today.getDate(); var todayMonth = today.getMonth(); var todayYear = today.getFullYear(); //first set all days to not being todays date var d0Today = 'No'; var d1Today = 'No'; var d2Today = 'No'; var d3Today = 'No'; var d4Today = 'No'; var d5Today = 'No'; var d6Today = 'No'; //check if day is todays date if(year == todayYear) { if(month == todayMonth) { if(d0 == todayDay) { d0Today = 'Yes'; } else if(d1 == todayDay) { d1Today = 'Yes'; } else if(d2 == todayDay) { d2Today = 'Yes'; } else if(d3 == todayDay) { d3Today = 'Yes'; } else if(d4 == todayDay) { d4Today = 'Yes'; } else if(d5 == todayDay) { d5Today = 'Yes'; } else if(d6 == todayDay) { d6Today = 'Yes'; } } } //add to week object var newWeek = { day1: { day: monday.getDate(), month: monday.getMonth(), year: year, date: monday, isToday: d0Today }, day2: { day: tuesday.getDate(), month: tuesday.getMonth(), year: year, date: tuesday, isToday: d1Today }, day3: { day: wednesday.getDate(), month: wednesday.getMonth(), year: year, date: wednesday, isToday: d2Today }, day4: { day: thursday.getDate(), month: thursday.getMonth(), year: year, date: thursday, isToday: d3Today }, day5: { day: friday.getDate(), month: friday.getMonth(), year: year, date: friday, isToday: d4Today }, day6: { day: saturday.getDate(), month: saturday.getMonth(), year: year, date: saturday, isToday: d5Today }, day7: { day: sunday.getDate(), month: sunday.getMonth(), year: year, date: sunday, isToday: d6Today } }; //return week return newWeek; } exports.getWeek = function (date, calStartDay) { var day = date.getDate(); var month = date.getMonth(); var year = date.getFullYear(); //get first day of the week if(calStartDay == 0) { var d0 = date.getDate() - (date.getDay()); } else if (calStartDay == 1) { //first day of week = date - (day of week-1) to start week on mondays var d0 = date.getDate() - (date.getDay() - 1); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 6); } } else if (calStartDay == 2) { //first day of week = date - (day of week-2) to start week on tuesday var d0 = date.getDate() - (date.getDay() - 2); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 5); } } else if (calStartDay == 3) { //first day of week = date - (day of week-3) to start week on wednesday var d0 = date.getDate() - (date.getDay() - 3); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 4); } } else if (calStartDay == 4) { //first day of week = date - (day of week-4) to start week on thursday var d0 = date.getDate() - (date.getDay() - 4); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 3); } } else if (calStartDay == 5) { //first day of week = date - (day of week-5) to start week on friday var d0 = date.getDate() - (date.getDay() - 5); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() + 2); } } else if (calStartDay == 6) { //first day of week = date - (day of week+1) to start week on saturday var d0 = date.getDate() - (date.getDay() + 1); //unless it starts on a sunday, then add 6 if (date.getDay() == 0) { var d0 = date.getDate() - (date.getDay() - 1); } } //get rest of the days of the week var d1 = d0 + 1; var d2 = d0 + 2; var d3 = d0 + 3; var d4 = d0 + 4; var d5 = d0 + 5; var d6 = d0 + 6; //create the date objects var monday = new Date(year, month, d0); var tuesday = new Date(year, month, d1); var wednesday = new Date(year, month, d2); var thursday = new Date(year, month, d3); var friday = new Date(year, month, d4); var saturday = new Date(year, month, d5); var sunday = new Date(year, month, d6); //get todays date var today = new Date(); var todayDay = today.getDate(); var todayMonth = today.getMonth(); var todayYear = today.getFullYear(); //first set all days to not being todays date var d0Today = 'No'; var d1Today = 'No'; var d2Today = 'No'; var d3Today = 'No'; var d4Today = 'No'; var d5Today = 'No'; var d6Today = 'No'; //check if day is todays date if(year == todayYear) { if(month == todayMonth) { if(d0 == todayDay) { d0Today = 'Yes'; } else if(d1 == todayDay) { d1Today = 'Yes'; } else if(d2 == todayDay) { d2Today = 'Yes'; } else if(d3 == todayDay) { d3Today = 'Yes'; } else if(d4 == todayDay) { d4Today = 'Yes'; } else if(d5 == todayDay) { d5Today = 'Yes'; } else if(d6 == todayDay) { d6Today = 'Yes'; } } } //add to week object var newWeek = { day1: { day: monday.getDate(), month: monday.getMonth(), year: year, date: monday, isToday: d0Today }, day2: { day: tuesday.getDate(), month: tuesday.getMonth(), year: year, date: tuesday, isToday: d1Today }, day3: { day: wednesday.getDate(), month: wednesday.getMonth(), year: year, date: wednesday, isToday: d2Today }, day4: { day: thursday.getDate(), month: thursday.getMonth(), year: year, date: thursday, isToday: d3Today }, day5: { day: friday.getDate(), month: friday.getMonth(), year: year, date: friday, isToday: d4Today }, day6: { day: saturday.getDate(), month: saturday.getMonth(), year: year, date: saturday, isToday: d5Today }, day7: { day: sunday.getDate(), month: sunday.getMonth(), year: year, date: sunday, isToday: d6Today } }; //return week return newWeek; } exports.printTable = function(date, calStartDay, dateNumber, todayDateNumber) { //get calendar head details var tableOutput = "<table><thead>"; tableOutput+= getTableHead(calStartDay); tableOutput += "</thead>"; //get all details about date, day, month and year var day = date.getDate(); var month = date.getMonth(); var year = date.getFullYear(); //get first day of month, last day of month and lenght of month var monthStart = new Date(year, month, 1); var monthEnd = new Date(year, month + 1, 1); var monthLength = Math.round((monthEnd - monthStart) / (1000 * 60 * 60 * 24)); //array to hold days of the week var weekday = new Array(7); weekday[0] = "Sunday"; weekday[1] = "Monday"; weekday[2] = "Tuesday"; weekday[3] = "Wednesday"; weekday[4] = "Thursday"; weekday[5] = "Friday"; weekday[6] = "Saturday"; //check what day of the week first day of the month is var firstDay = weekday[monthStart.getDay()]; //variable to hold how many weeks will be on calendar var numWeeks = 5; //set starting date for month on calendar if (firstDay == "Monday") { var startingDay = 1; //if the month starts on a monday and has less than 29 days then an week less is required on calendar if (monthLength < 29) { //change number of weeks to 6 numWeeks = 4; } } else if (firstDay == "Tuesday") { var startingDay = 2; } else if (firstDay == "Wednesday") { var startingDay = 3; } else if (firstDay == "Thursday") { var startingDay = 4; } else if (firstDay == "Friday") { var startingDay = 5; } else if (firstDay == "Saturday") { var startingDay = 6; //if the month starts on a saturday and has 31 days then an extra week is required on calendar if (monthLength > 30) { //change number of weeks to 6 numWeeks = 6; } } else if (firstDay == "Sunday") { var startingDay = 7; //if the month starts on a sunda and has 30 or more days then an extra week is required on calendar if (monthLength > 29) { //change number of weeks to 6 numWeeks = 6; } } //get first day of the week //first day of week = todays date - (day of week-1) to start week on mondays var w1 = 1; var w2 = w1 + 7; var w3 = w2 + 7; var w4 = w3 + 7; var w5 = w4 + 7; var w6 = w5 + 7; //get a day from each week var week1day = new Date(date.setDate(w1)); var week2day = new Date(date.setDate(w2)); var week3day = new Date(date.setDate(w3)); var week4day = new Date(date.setDate(w4)); var week5day = new Date(date.setDate(w5)); var week6day = new Date(date.setDate(w6)); var calendar = { firstDay: firstDay, monthLenght: monthLength, calendarWeeks: numWeeks }; calendar.week1 = getWeek(week1day, calStartDay); calendar.week2 = getWeek(week2day, calStartDay); calendar.week3 = getWeek(week3day, calStartDay); calendar.week4 = getWeek(week4day, calStartDay); if (numWeeks > 4) { calendar.week5 = getWeek(week5day, calStartDay); } if (numWeeks > 5) { calendar.week6 = getWeek(week6day, calStartDay); } var calArray = [getWeek(week1day, calStartDay),getWeek(week2day, calStartDay),getWeek(week3day, calStartDay),getWeek(week4day, calStartDay), ]; if (numWeeks > 4) { calArray.push(getWeek(week5day, calStartDay)); } if (numWeeks > 5) { calArray.push(getWeek(week5day, calStartDay)); } //get todays date details var today = new Date(); var thisDay = today.getDate(); var thisMonth = today.getMonth(); var thisYear = today.getFullYear(); //print table body var weekNo = 1; var tableBody = "<tbody>"; for (weekNo = 0; weekNo <= calendar.calendarWeeks-1; weekNo++) { tableBody+= "<tr>"; if (calArray[weekNo].day1.day == thisDay && calArray[weekNo].day1.month == thisMonth && calArray[weekNo].day1.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day1.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day1.day + '</div>'; tableBody += '</td>'; } if (calArray[weekNo].day2.day == thisDay && calArray[weekNo].day2.month == thisMonth && calArray[weekNo].day2.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day2.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day2.day + '</div>'; tableBody += '</td>'; } if (calArray[weekNo].day3.day == thisDay && calArray[weekNo].day3.month == thisMonth && calArray[weekNo].day3.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day3.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day3.day + '</div>'; tableBody += '</td>'; } if (calArray[weekNo].day4.day == thisDay && calArray[weekNo].day4.month == thisMonth && calArray[weekNo].day4.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day4.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day4.day + '</div>'; tableBody += '</td>'; } if (calArray[weekNo].day5.day == thisDay && calArray[weekNo].day5.month == thisMonth && calArray[weekNo].day5.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day5.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day5.day + '</div>'; tableBody += '</td>'; } if (calArray[weekNo].day6.day == thisDay && calArray[weekNo].day6.month == thisMonth && calArray[weekNo].day6.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day6.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day6.day + '</div>'; tableBody += '</td>'; } if (calArray[weekNo].day7.day == thisDay && calArray[weekNo].day7.month == thisMonth && calArray[weekNo].day7.year == thisYear) { tableBody += '<td><div class="'+todayDateNumber+'">' + calArray[weekNo].day7.day + '</div>'; tableBody += '</td>'; } else { tableBody += '<td><div class="'+dateNumber+'">' + calArray[weekNo].day7.day + '</div>'; tableBody += '</td>'; } tableBody += '</tr>'; } tableBody += "</tbody>"; tableOutput += tableBody; tableOutput += "</table>"; return tableOutput; } function getTableHead(calStartDay) { var tableHead = ""; if(calStartDay == 0) { tableHead+= "<tr><th>Sunday</th><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Saturday</th></tr>"; } else if (calStartDay == 1) { tableHead+= "<tr><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Saturday</th><th>Sunday</th></tr>"; } else if (calStartDay == 2) { tableHead+= "<tr><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Saturday</th><th>Sunday</th><th>Monday</th></tr>"; } else if (calStartDay == 3) { tableHead+= "<tr><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Saturday</th><th>Sunday</th><th>Monday</th><th>Tuesday</th></tr>"; } else if (calStartDay == 4) { tableHead+= "<tr><th>Thursday</th><th>Friday</th><th>Saturday</th><th>Sunday</th><th>Monday</th><th>Tuesday</th><th>Wednesday</th></tr>"; } else if (calStartDay == 5) { tableHead+= "<tr><th>Friday</th><th>Saturday</th><th>Sunday</th><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th></tr>"; } else if (calStartDay == 6) { tableHead+= "<tr><th>Saturday</th><th>Sunday</th><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th></tr>"; } return tableHead; }