Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
October 30, 2021 08:03 pm GMT

Calendar using Vanilla JS

Hola!
In this busy world Having a calendar is often a handy feature to have.

There many calendar libraries out, components out there but
I tried to create a Calendar Using Vanilla JS, where I can move through the months. lets see how I have done.

var year = new Date().getFullYear();var day = new Date().getDay()var month = new Date().getMonth()var date = new Date().getDate()var weekdays = [ "sun" , "mon" , "tue", "wed", "thu" , "fri" , "sat" ]var months = ["Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sept" , "Oct" ,"Nov" , "Dec" ]

we need a function which checks for leap year to set no of days in a month

var checkLeapYear = (setYear) =>{  if( setYear%400 == 0){    return true;  }  else if(setYear%100 == 0){    return false;  }  else if(setYear%4 == 0){    return true  }  else{    return false  }}var monthdays = (checkYear) => {  return {  "Jan" : 31,  "Feb" : checkLeapYear(year) ? 29 : 28 ,   "Mar" : 31,  "Apr" : 30,  "May" : 31,  "Jun" : 30,  "Jul" : 31,  "Aug" : 31,  "Sept" :30,  "Oct" : 31,  "Nov" : 30 ,   "Dec" :31}}

Set Top bar for calendar

const setTopDate=(setMonth,setYear)=>{  document.querySelector('[data-selected="full-date"]').innerHTML = months[setMonth] + " " + setYear;}

set colspan for 1st row so that it should show empty column for the weekdays before 1st date of the month

const setFirstColspan = (monthdate) =>{  var ele = document.getElementsByTagName("table")[0].rows[2]   ele.innerHTML = ""  if(monthdate>0){  var data = document.createElement("td")   ele.appendChild(data)   ele.cells[0].setAttribute( "colspan", "" +(monthdate ))  }   setCalendarData(monthdate)  setLastColspan()}

finally set calendar data

const setCalendarData = (monthdate) => {   var count = 1;   for(var i = monthdate;i<=6;i++){     var data = document.createElement("td")     var text = document.createTextNode(count);     count++;     data.appendChild(text)     document.getElementsByTagName("table")[0].rows[2].appendChild(data);   }      var tempMonthDays  = monthdays(year)[months[month]]    for(var i = count;i<=tempMonthDays;i+=7){      row = document.createElement("tr");      for(var j =0;j<7&&count<=tempMonthDays;j++){        var data = document.createElement("td")        var text = document.createTextNode(count);        count++;        data.appendChild(text)        row.append(data)      }     document.getElementsByTagName("table")[0].appendChild(row);   } }

now we also need to set colspan for last row empty columns

const setLastColspan = () => {  var ele_len = document.getElementsByTagName("table")[0].rows  var ele = document.getElementsByTagName("table")[0].rows[(ele_len.length)-1]  if(7-(ele.cells.length) > 0){  var data = document.createElement("td")   ele.appendChild(data)   ele.cells[ele.cells.length-1].setAttribute( "colspan", "" +(7-(ele.cells.length)+1))  }}

on change of month if user pressed on previous month the operation="prev" else if user want to move to next month the operation in that case is "next"

const changeMonth = (operation) =>{  var ele =  document.getElementsByTagName("table")[0]  var len =  Object.keys(ele.rows).length  len--;  while(len>2){     ele.removeChild( document.getElementsByTagName("table")[0].rows[len])     len--;  }  if(operation == "next"){  if(month+1> 11){    year = year+1    month = 0  }  else {    month = month+1  }}  if(operation == "prev"){  if(month-1<0){     year = year-1     month = 11   }   else {     month = month-1   }  }  setTopDate(month,year);  setFirstDay(year , month)  count = 1;  row = "undefined";}

add some css to style the calendar

th,td{  border: 2px solid black;}td,th{  padding: 10px;  text-align:center;}.actions{  display : flex;  justify-content : space-around;  width : 300px;  text-align : center;  color : #ffffff;  font-size: 25px;  font-weight: 600;  margin-top : 20px;  cursor:pointer;}.actions-2{  display : flex;  justify-content : space-around;  width : 300px;  cursor: pointer;}.next-button{   height: 30px;   width: 30px;   border-radius : 50%;   background-color : #3d3d3d;}.prev-button{   height: 30px;   width: 30px;   border-radius : 50%;   background-color : #3d3d3d;}tr:first-child th {  border-top-right-radius : 20px;  border-top-left-radius : 20px;  background-color : lightblue;  border-color : transparent;}td:hover{  background-color: offwhite;   box-shadow: 0px 2px 3px 2px rgba(0,0,0,0.5); }td[colspan]{   box-shadow: 0px 2px 3px 0px rgba(0,0,0,0.2); }tr th {   box-shadow: 0px 2px 3px 0px rgba(0,0,0,0.2);   cursor: pointer;   border:transparent;  background-color :lightgrey;  color:#3d3d3d;}tr td{  box-shadow: 0px 2px 3px 0px rgba(0,0,0,0.2);   cursor: pointer;  border:transparent;}

hope you understood and liked this little program
Happy Developing!

for reference :
codepen - https://codepen.io/harshita-nahta/pen/PoKpRVp


Original Link: https://dev.to/harshitanahta/calendar-using-vanilla-js-2g5m

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To