как выделить цветом в календарь сегодн число, сегодн день недели, текущий месяц, дни недели других месяцев, и сделать навигацию по годам?

SOS

    ```    <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      #table_year {
        table-layout: fixed;
        width: 100%;
        border: 1px solid hsl(0, 0%, 66%);
        border-radius: 4px;
      }

      .td_month {
        width: 260px;
        height: 270px;
        border: 1px solid hsl(0, 0%, 66%);
        border-radius: 4px;
      }

      #num_year,
      #January,
      #February, 
      #March,
      #April, 
      #May,
      #June, 
      #July,
      #August, 
      #September,
      #October, 
      #November,
      #December {
        background-color: hsl(210, 100%, 95%);
        color: hsl(210, 100%, 50%);
        font: bold 18px serif;
        text-align: center;
        border: 1px solid hsl(0,0%,66%);
        border-radius: 4px;
        padding: 5px;
        margin: 0 0 5px 0;
      }

      #num_year {
        font: bold 24px serif;
        width: 780px;
        border: 1px solid hsl(0, 0%, 66%);
        border-radius: 4px;
        padding: 5px;
        margin: 0 0 5px 0;
      }

      #month1,
      #month2,
      #month3,
      #month4,
      #month5,
      #month6,
      #month7,
      #month8,
      #month9,
      #month10,
      #month11,
      #month12 {
        display: inline-block;
        border: 1px solid hsl(0, 0%, 66%);
        border-radius: 4px;
        padding: 5px;
        width: auto;
      }

      .day {
        border: 1px solid hsl(0, 0%, 66%);
        width: auto;
        line-height: 30px;
        text-align: center;
        margin: 1px;
        background-color: hsl(210, 100%, 95%);
        color: hsl(210, 100%, 50%);
      }

      .table_month {
        table-layout: fixed;
        width: 100%;
        height: 220px;
        border: 1px solid hsl(0, 0%, 66%);
        border-radius: 4px;
      }

      .table_month tr td:nth-child(1) {
      width: 20%;
      font-weight: bold;
      }
      
      .table_month tr td.day:nth-child(1) {
      background-color: hsl(210, 100%, 88%);
      color: hsl(210, 100%, 60%);
      }
      
      .table_month tr:nth-child(n + 6) td.day:nth-child(1) {
      background-color: hsl(348, 100%, 88%);
      color: hsl(348, 100%, 60%);
      }

      .table_month tr:nth-child(n + 6) td.day {
        background-color: hsl(348, 100%, 95%);
        color: hsl(348, 100%, 50%);
      }
      
      #year_input {
        border: 1px solid hsl(0,0%,66%);
        display: inline-block;
        text-align: center;
        font: bold 24px serif;
        color: hsl(210,100%,50%);
        width: 100px;
      }

    </style>
  </head>

  <body>
    <div id="num_year">
    Календарь на 
    <button class="year_minus">◀</button>
    <input id="year_input" type="number" size="4" value="2021"/> 
    <button class="year_plus">▶</button>
    год.</button><br/>
<button id="presently">сегодня</button>
    </div>
    <table id="table_year">
      <tr>
        <td class="td_month">
          <div id="month1">
            <div id="January"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month2">
            <div id="February"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month3">
            <div id="March"></div>
            <table class="table_month"></table>
          </div>
        </td>
      </tr>
      <tr>
        <td class="td_month">
          <div id="month4">
            <div id="April"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month5">
            <div id="May"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month6">
            <div id="June"></div>
            <table class="table_month"></table>
          </div>
        </td>
      </tr>
      <tr>
        <td class="td_month">
          <div id="month7">
            <div id="July"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month8">
            <div id="August"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month9">
            <div id="September"></div>
            <table class="table_month"></table>
          </div>
        </td>
      </tr>
      <tr>
        <td class="td_month">
          <div id="month10">
            <div id="October"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month11">
            <div id="November"></div>
            <table class="table_month"></table>
          </div>
        </td>
        <td class="td_month">
          <div id="month12">
            <div id="December"></div>
            <table class="table_month"></table>
          </div>
        </td>
      </tr>
    </table>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
          this.month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'][month];
          var startDay = new Date(year, month, 1);
          var offsetDay = (startDay.getDay() || 7) - 1;
          startDay.setDate(startDay.getDate() - offsetDay);
          var lastDay = new Date(startDay);
          var days = new Date(year, month + 1, 0).getDate();
          days = Math.ceil((days + offsetDay) / 7) * 7;
          lastDay.setDate(lastDay.getDate() + days);
          this.data = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
          while (startDay < lastDay) {
            this.data.push(startDay.getDate());
            startDay.setHours(24);
          }
        },
        render: function() {
          var html = ['<tr class="week_day">', '<tr>', '<tr>', '<tr>', '<tr>', '<tr>', '<tr>'];
          for (var i = 0; i < this.data.length; i++) {
            html[i % 7] += '<td class="day">' + this.data[i];
          }
          this.monthName.textContent = this.month;
          this.element.innerHTML = html.join('');
        },
      };
      var today = new Date(),
        thisYear = today.getFullYear(),
        thisMonth = today.getMonth(),
        months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
        
      calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
      calendar.numYear = document.querySelector('#num_year');
      
      months.forEach((v,i) => {
        calendar.monthName = document.querySelector(`#${v}`);
        calendar.element = document.querySelectorAll('.table_month')[i];
        calendar.update(thisYear, i);
        calendar.render();
      });
    </script>
  </body>
</html> ```        

как в этом скрипте

    <!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Вертикальный календарь</title>
<style type="text/css">
@import url('https://fonts.googleapis.com/css?family=Baumans&display=swap');
body { width: 1023px; }
body, select, input { font: 14px serif; }
#calendar { width: 330px; height: 375px; display: inline-block; border: 1px solid hsl(0,0%,66%); border-radius: 6px/4px; padding: 5px; margin: 0 0 5px 0; }
#navigation_panel {
background-color: hsl(210,100%,92%);
min-height: 34px; 
max-height: 78px;
border: 1px solid hsl(0,0%,66%);
border-radius: 6px/4px;
padding: 10px;
margin-bottom: 5px;
text-align: center;
vertical-align: middle; 
display: -webkit-box; 
display: -webkit-flex; 
display: flex;
-webkit-box-align: center; 
-webkit-align-items: center; 
align-items: center; 
-webkit-box-pack: center; 
-webkit-justify-content: center; 
justify-content: center; 
-webkit-flex-wrap: wrap;
flex-wrap: wrap; }
#navigation_panel button,
#navigation_panel #calendar_year {
background-color: hsl(210,100%,85%);
color: hsl(210,100%,45%);
font: 14px serif;
border: 1px solid hsl(210,100%,45%); }
#calendar_month {
background-color: transparent;
color: hsl(210,100%,45%);
font: 14px serif;
border: 1px solid hsl(210,100%,45%); }
#navigation_panel button { 
height: 34px;
vertical-align: middle; }
#background_month {
background-color: hsl(210,100%,85%);
display: inline-block; }
button.minus { 
width: 28px;
text-align: center;
border-radius: 12px 0 0 12px / 10px 0 0 10px;
margin-right: -1px; }
button.plus {
width: 28px;
text-align: center;
border-radius: 0 12px 12px 0 / 0 10px 10px 0;
margin-left: -1px; }
.month_plus {
margin-right: 35px; }
.arrow {
display: inline-block;
line-height: 0.5; }
#presently {
width: 234px;
margin-top: 10px;
border-radius: 12px/10px; }
#calendar_month {
width: 89px;
display: inline-block; }
#calendar_year {
width: 54px;
display: inline-block; }
select {
height: 34px; }
input {
height: 30px;
display: inline-block;
text-align: center; }
#table {
font-family: 'Baumans', cursive;
table-layout: fixed;
width: 100%;
height: 413px;
padding: 2px; }
#table, td {
border: 1px solid hsl(0,0%,66%);
border-radius: 6px/4px; }
td {
margin: 1px;
text-align: center; }
#table tbody td.prevMonth {
background-color: hsl(210,100%,95%);
color: hsl(210,100%,80%);
border: 1px solid hsl(0,0%,80%); } /* будние дни предыдущего месяца */
#table tbody tr:nth-child(n + 6) td.prevMonth {
background-color: hsl(348,100%,95%);
color: hsl(348,100%,80%);
border: 1px solid hsl(0,0%,80%); } /* выходные дни предыдущего месяца */
#table tbody td.nextMonth {
background-color: hsl(210,100%,95%);
color: hsl(210,100%,80%);
border: 1px solid hsl(0,0%,80%); } /* будние дни следующего месяца */
#table tbody tr:nth-child(n + 6) td.nextMonth {
background-color: hsl(348,100%,95%);
color: hsl(348,100%,80%);
border: 1px solid hsl(0,0%,80%); } /* выходные дни следующего месяца */
#presently.hide {
display: none; }
#table tbody tr td.week-day {
background-color: hsl(210,100%,85%);
color: hsl(210,100%,50%);
border: 1px solid hsl(0,0%,60%);
width: 20%; } /* день недели */
#table tbody tr:nth-child(n + 6) td.week-day {
background-color: hsl(348,100%,85%);
color: hsl(348,100%,50%);
border: 1px solid hsl(0,0%,60%); } /* день недели выходной*/
#table tbody tr td.week-day.curDay {
border: 1px solid hsl(210,100%,50%);
background-color: hsl(210,100%,75%);
color: hsl(210,100%,98%);
font-weight: bold;
text-shadow:
1px 1px hsl(210,100%,50%),
-1px 1px hsl(210,100%,50%),
1px -1px hsl(210,100%,50%),
-1px -1px hsl(210,100%,50%),
1px 0 hsl(210,100%,50%),
0 1px hsl(210,100%,50%),
-1px 0 hsl(210,100%,50%),
0 -1px hsl(210,100%,50%);
letter-spacing: 2px; } /* сегодн день недели */
#table tbody tr:nth-child(n + 6) td.week-day.curDay { border: 1px solid hsl(348,100%,50%); background-color: hsl(348,100%,75%); color: hsl(348,100%,98%); font-weight: bold; text-shadow: 1px 1px hsl(348,100%,50%), 1px -1px hsl(348,100%,50%), -1px 1px hsl(348,100%,50%), -1px -1px hsl(348,100%,50%), 1px 0 hsl(348,100%,50%), -1px 0 hsl(348,100%,50%), 0 1px hsl(348,100%,50%), 0 -1px hsl(348,100%,50%); letter-spacing: 2px; } /* сегодн день недели выходной */
#table tbody td {
background-color: hsl(210,100%,90%);
color: hsl(210,100%,50%); } /* будние дни текущего месяца */
#table tbody tr:nth-child(n + 6) td{ background-color: hsl(348,100%,90%); color: hsl(348,100%,50%); } /* выходные дни текущего месяца */
#table tbody tr td.curMonth.curDay { background-color: hsl(210,100%,80%); border: 1px solid hsl(210,100%,50%); font-weight: bold; color: hsl(210,100%,100%); text-shadow: 1px 1px hsl(210,100%,50%), -1px 1px hsl(210,100%,50%), 1px -1px hsl(210,100%,50%), -1px -1px hsl(210,100%,50%), 1px 0 hsl(210,100%,50%), 0 1px hsl(210,100%,50%), -1px 0 hsl(210,100%,50%), 0 -1px hsl(210,100%,50%); letter-spacing: 3px; } /* сегодня будний */
#table tbody tr:nth-child(n + 6) td.curMonth.curDay { background-color: hsl(348,100%,80%); border: 1px solid hsl(348,100%,50%); color: hsl(348,100%,100%); text-shadow: 1px 1px hsl(348,100%,50%), 1px -1px hsl(348,100%,50%), -1px 1px hsl(348,100%,50%), -1px -1px hsl(348,100%,50%), 1px 0 hsl(348,100%,50%), -1px 0 hsl(348,100%,50%), 0 1px hsl(348,100%,50%), 0 -1px hsl(348,100%,50%); letter-spacing: 3px; } /* сегодня выходной */

#calendar { display: flex; flex-direction: column; }
.content_month { flex: 1; }
#table { height:100%; }

button, select, input { outline: none; }

 </style>
</head>
<body>
<div id="calendar">
<div id="navigation_panel">
<button class="month_minus minus"><span class="arrow">◀</span></button>
<span id="background_month"><select id="calendar_month"></select></span>
<button class="month_plus plus"><span class="arrow">▶</span></button>
<button class="year_minus minus"><span class="arrow">◀</span></button>
<input type="number" size="4" id="calendar_year"/>
<button class="year_plus plus"><span class="arrow">▶</span></button><br/>
<button id="presently">сегодня</button>
</div>
<div class="content_month">
<table id="table">
<tbody></tbody>
</table></div>
</div>
 <script>
Date.prototype.reduce = function(callback, value) {
 var year = this.getFullYear();
 var month = this.getMonth();
 var step = new Date(year, month, 1);
 var last = new Date(year, month + 1, 0);
 step.setHours(24 * (0 - ((step.getDay() + 6) % 7)));
 last.setHours(24 * (6 - ((last.getDay() + 6) % 7)));
 for (var i = 0; step <= last; i++) {
 value = callback(value, new Date(+step), i, this);
 step.setHours(24);
 }
 return value;
};
var data = new Date();
var selectMonth = document.querySelector('#calendar_month');
var monthNames = [ 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь',];
monthNames.forEach(function(monthName, i) {
 selectMonth.options[i] = new Option(monthName, i);
});
selectMonth.addEventListener('change', function() {
 data.setMonth(this.value);
 createCalendar(data);
});
var minusMonth = document.querySelector('.month_minus');
minusMonth.addEventListener('click', function() {
 data.setMonth(data.getMonth() - 1);
 createCalendar(data);
});
var plusMonth = document.querySelector('.month_plus');
plusMonth.addEventListener('click', function() {
 data.setMonth(data.getMonth() + 1);
 createCalendar(data);
});
var minusYear = document.querySelector('.year_minus');
minusYear.addEventListener('click', function() {
 data.setYear(data.getFullYear() - 1);
 createCalendar(data);
});
var plusYear = document.querySelector('.year_plus');
plusYear.addEventListener('click', function() {
 data.setYear(data.getFullYear() + 1);
 createCalendar(data);
});
var inputYear = document.querySelector('#calendar_year');
inputYear.addEventListener('input', function() {
 if (/^\d{4}$/.test(this.value)) {
 data.setYear(this.value);
 createCalendar(data);
 }
});
var currentButton = document.querySelector('#presently');
currentButton.addEventListener('click', function() {
 data = new Date();
 createCalendar(data);
});

function createCalendar(data) {
 var now = new Date().setHours(0, 0, 0, 0);
 var year = data.getFullYear();
 inputYear.value = year;
 var month = data.getMonth();
 selectMonth.selectedIndex = month;
 currentButton.classList.remove('hide');
 var indexcurDay;
 var cls = ['prevMonth', 'curMonth', 'nextMonth'],
 indexCls = 0;
 var html = data.reduce(function(value, current, index, source) {
 var date = current.getDate();
 if (date == 1) indexCls++;
 var className = cls[indexCls];
 if (+now == +current && indexCls == 1) {
 className += ' curDay';
 currentButton.classList.add('hide');
 indexcurDay = index % 7;
 }
 value[index % 7] += '<td class="' + className + '">' + date;
 return value
 }, ['<tr><td class="week-day">Пн.',
             '<tr><td class="week-day">Вт.',
             '<tr><td class="week-day">Ср.',
             '<tr><td class="week-day">Чт.',
             '<tr><td class="week-day">Пт.',
             '<tr><td class="week-day">Сб.',
             '<tr><td class="week-day">Вс.']);
 document.querySelector('#table tbody').innerHTML = html.join('');
 var daysTd = document.querySelectorAll('.week-day');
 if(indexcurDay !== void 0) daysTd[indexcurDay].classList.add('curDay');
}
createCalendar(data);
var timer;
function refresh() {
 window.clearTimeout(timer);
 var finish = new Date().setHours(24, 0, 0, 0);
 finish -= data;
 timer = window.setTimeout(function() {
 createCalendar(data);
 refresh();
 }, finish);
}
refresh();
 </script>
 </body>
</html>    ```

Ответы (0 шт):