Как можно вывести числа дней календаря в соответствии с днями недели при его отображении?

Как можно переписать цикл для правильного отображения чисел каждого месяца в соответсвии с днями недели в вашем коде в App.vue?
  • 16 марта 2024 г. 21:19
Ответы на вопрос 2
Для вывода чисел дней календаря в соответствии с днями недели можно использовать таблицу семь строк (по количеству дней недели) и необходимое количество столбцов (по количеству недель в месяце). Первый столбец будет отображать дни недели, а остальные столбцы - числа дней месяца.

Пример реализации данного подхода в App.vue:

```html
<template>
  <div>
    <table>
      <tr>
        <th>Пн</th>
        <th>Вт</th>
        <th>Ср</th>
        <th>Чт</th>
        <th>Пт</th>
        <th>Сб</th>
        <th>Вс</th>
      </tr>
      <tr v-for="week in calendar">
        <td v-for="day in week">{{ day }}</td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      calendar: [[]] // двумерный массив для хранения чисел дней календаря
    }
  },
  mounted() {
    this.generateCalendar();
  },
  methods: {
    generateCalendar() {
      let month = new Date().getMonth(); // получаем текущий месяц
      let daysInMonth = new Date(new Date().getFullYear(), month + 1, 0).getDate(); // получаем количество дней в текущем месяце
      let firstDayIndex = new Date(new Date().getFullYear(), month, 1).getDay(); // получаем индекс первого дня недели в текущем месяце
      
      let week = [];
      
      for (let i = 1; i <= firstDayIndex; i++) {
        week.push(''); // добавляем пустые ячейки для дней предыдущего месяца
      }
      
      for (let i = 1; i <= daysInMonth; i++) {
        week.push(i.toString()); // добавляем числа дней текущего месяца
        if (week.length === 7) {
          this.calendar.push(week); // заканчиваем неделю и добавляем в календарь
          week = [];
        }
      }
      
      if (week.length > 0) {
        while (week.length < 7) {
          week.push(''); // добавляем пустые ячейки для дней следующего месяца
        }
        this.calendar.push(week);
      }
    }
  }
}
</script>
```

В данном примере используется метод generateCalendar для генерации календаря с учетом чисел дней месяца и дней недели. Массив calendar представляет собой двумерный массив, хранящий числа дней календаря. Код автоматически подставляет пустые ячейки для дней предыдущего и следующего месяцев, чтобы календарь отображался корректно.
Нет в этом цикле никакой проблемы. Проблема в логике. 
Там должен быть день недели первого числа, а у вас - тупо первое число, единица. Соответственно, перед ним втыкается один пробел независимо от того, с какого дня начинается месяц.
Похожие вопросы