Создание еженедельного календаря для отражения дней недели с правильными датами

#javascript #jquery

#javascript #jquery

Вопрос:

еженедельный календарь<—-img здесь —! У меня есть еженедельная таблица, и я хочу интегрировать в нее календарную систему. в img, где он показывает год, я хотел бы, чтобы он показывал 7-дневную неделю (пример: 20.12.20 — 27.12.2020), с датами, непосредственно отражающими дни недели. я также хотел бы добавить кнопки для перехода к предыдущей и следующей неделе, при этом дни недели также переходят в соответствие с этой неделей. я могу позаботиться о данных, которые будут помещены в ячейки под днями, и обновлять их, когда у меня будет этот календарь. Любая помощь будет с благодарностью?

Комментарии:

1. Хотите сделать это без помощи библиотеки?

2. Пожалуйста, покажите, какие исследования вы провели и какие попытки вы предприняли для самостоятельного решения этой проблемы.

Ответ №1:

Вот краткий пример, который я сделал, используя HTML, CSS и JS.

HTML-код:

 <div class="container">
  <div class="calendar">
    <div class="nav">
      <i id="prev" class="fas fa-arrow-left arrow" tabindex="0"></i>
      <div class="calendar-icon-container">
        <h1 id="date-range"></h1>
        <div>
          <div id="calendar-popover" class="calendar-popover hidden">
          </div>
        </div>
      </div>
      <i id="next" class="fas fa-arrow-right arrow" tabindex="0"></i>
    </div>
    <div id="header" class="header">
      <div>
        <div>Monday</div>
        <div class="date"></div>
      </div>
      <div>
        <div>Tuesday</div>
        <div class="date"></div>
      </div>
      <div>
        <div>Wednesday</div>
        <div class="date"></div>
      </div>
      <div>
        <div>Thursday</div>
        <div class="date"></div>
      </div>
      <div>
        <div>Friday</div>
        <div class="date"></div>
      </div>
      <div>
        <div>Saturday</div>
        <div class="date"></div>
      </div>
      <div>
        <div>Sunday</div>
        <div class="date"></div>
      </div>
    </div>
    <div class="body">
      <div>
          <li>text</li>
      </div>
      <div>
          <li>text</li>
      </div>
      <div>
          <li>text</li>
      </div>
      <div>
          <li>....</li>
      </div>
      <div>
          <li>text</li>
      </div>
      <div>
          <li>text</li>
      </div>
      <div>
          <li>text</li>
      </div>
    </div>
  </div>
</div>
 

CSS-код:

 .container {
     display: flex;
     align-items: center;
     flex-direction: column;
}
 .calendar > .nav {
     align-items: center;
}
 .calendar > div {
     display: flex;
     justify-content: space-evenly;
}
 .calendar > div > div {
     padding: 12px;
}
 .calendar > .header > div, .calendar > .body > div {
     flex: 1 0 120px;
     border-right: 1px solid #e6e6e6;
}
 .fas:focus {
     outline: none;
     opacity: 1;
}
 
 

JS-код:

 (function() {
  var mondayRef = 1;
  var sundayRef = 7;
  
  var prev = document.getElementById('prev');
  var next = document.getElementById('next');
  var dateRange = document.getElementById('date-range');
  var dateViews = document.getElementsByClassName('date');
  var daysOfMonth = document.getElementById('days-of-month');
  var calendarPopover = document.getElementById('calendar-popover');
  
 
  function adjustCalendar(monRef, sunRef) {
    var monday = moment().day(monRef);
    var sunday = moment().day(sunRef);
    
    if (monRef > 0) {
      for (var date = monRef; date <= sunRef; date  ) {
        dateViews[(date - 1) % 7].innerHTML = moment().day(date).format('M[/]D');
      }
    } else {
      for (var date = -monRef; date >= -sunRef; date --) {
        dateViews[-(monRef   date)].innerHTML = moment().day(-date).format('M[/]D');
      }
    }
  
    if (monday.format('YYYY') !== sunday.format('YYYY')) {
      dateRange.innerHTML = `${monday.format('MMMM Do, YYYY')} - ${sunday.format('MMMM Do, YYYY')}`;
    } else {
      dateRange.innerHTML = `${monday.format('MMMM Do')} - ${sunday.format('MMMM Do, YYYY')}`;
    }
  }
  
  // Init
  adjustCalendar(mondayRef, sundayRef);
  
  next.onclick = function() {
    mondayRef  = 7;
    sundayRef  = 7;
    adjustCalendar(mondayRef, sundayRef);
  }
  
  prev.onclick = function() {
    mondayRef -= 7;
    sundayRef -= 7;
    adjustCalendar(mondayRef, sundayRef);
  }
})();
 

Если вы хотите, чтобы он выглядел лучше и дополнял его, вы можете это сделать. Я советую вам использовать табличный подход, поскольку это облегчит вам проектирование ширины, высоты, границ и т. Д. Удачи!