@missbells

Непонятна логика функции в календаре. Почему так?

var now = new Date();   // Определяем текущую дату. 
	now.setDate(1);   // Устанавливаем в переменной первое число текущего месяца. 
	var dayOfWeek = now.getDay();   //Определяем день недели. 
	if (dayOfWeek == 0)   
		dayOfWeek = 7;

	
	var table = '<table>';
for (var i = 2 - dayOfWeek; i <= 43 - dayOfWeek; i++) {//Цикл, который будет заполнять таблицу. 
  if ((i - 1 + dayOfWeek) % 7 == 1)
    table += '<tr>';//Открываем тег элемента ‹tr›. 
  table += '<td>' + i + '</td>';   // Выводим ячейку календаря. 
  if ((i - 1 + dayOfWeek) % 7 == 0)
    table += '</tr>';//Закрываем тег элемента ‹tr›. 
}
table += '</table>';//Закрываем тег элемента ‹table›

document.getElementById('calendar').innerHTML = table;


Общая суть функции ясна. Но почему здесь var i = 2 - dayOfWeek?
Почему, чтобы заполнить ячейки, не относящиеся к текущему месяцу, день недели отнимается именно от числа 2.

Заранее благодарна за ответ!
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 1
27cm
@27cm
TODO: Написать статус
Если запустить скрипт, то становится понятно, почему так сделали:
codepen.io/27cm/pen/vNMMXJ

Судя по всему автор скрипта хотел получить полную (прямоульную) страницу календаря. А так как первый день месяца не всегда приходится на понедельник, то таким образом определили, сколько ячеек необходимо добавить в таблицу перед первым числом месяца. Формула i = 2 - dayOfWeek определяет номер в самой первой ячейке (-5).

Можно было бы написать понятнее:
codepen.io/27cm/pen/rObbya
var table = '<table>';
for (var i = 1; i <= 42; i++) {
  if (i % 7 == 1) table += '<tr>';
  table += '<td>' + (i - dayOfWeek + 1) + '</td>';
  if (i % 7 == 0) table += '</tr>'; 
}
table += '</table>';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы