#c# #asp.net-core #razor
Вопрос:
Я пытаюсь составить календарь, но сталкиваюсь с проблемой, когда месяцы, начинающиеся в воскресенье, обрываются в первую неделю. Все остальное, кажется, работает, например, количество дней в месяце, и даты на самом деле правильные:
August 2021
MON TUE WED THU FRI SAT SUN
02 03 04 05 06 07 08
09 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
До сих пор это мой код:
DateTime displayMonth = new DateTime(2021, 8, 1); // This will be dynamic, ofc.
int firstDay = (int)displayMonth.DayOfWeek;
int cellCounter = 0;
int daysInMonth = (int)DateTime.DaysInMonth(displayMonth.Year, displayMonth.Month);
int weeksInMonth = (int)Math.Ceiling((double)(firstDay daysInMonth) / 7);
for (var w = 0; w <= weeksInMonth; w )
{
<div class="row">
@for (var d = 0; d < 7; d )
{
cellCounter ;
<div class="col">
@{
int day = 1 cellCounter - firstDay;
if (day > 0 amp;amp; day <= daysInMonth)
{
<h1>@day</h1>
}
}
</div>
}
</div>
}
Комментарии:
1. Обратите внимание,
displayMonth.DayOfWeek
что в воскресенье будет 0 (потому что это то, что США используют для начала своей недели), но вы действительно хотите, чтобы это был день номер 7 (или более точно смещенный 6).2. Переместите счетчик ячеек ; ниже div «coll» по мере увеличения за день до его фактического использования, и, как упоминал @gunr2171, воскресенье начинается с 0 дня недели.
Ответ №1:
Я уже знал, что значения индекса DayOfWeek
и в воскресенье равны 0. Чего у меня не было, так это «преобразования», чтобы сместить понедельник на 0:
int firstDay = ((int)displayMonth.DayOfWeek 6) % 7;
Это рабочий код:
DateTime displayMonth = new DateTime(2021, 9, 1);
int firstDay = ((int)displayMonth.DayOfWeek 6) % 7;
int cellCounter = 0;
int daysInMonth = (int)DateTime.DaysInMonth(displayMonth.Year, displayMonth.Month);
int weeksInMonth = (int)Math.Ceiling((double)(firstDay daysInMonth) / 7);
for (var w = 0; w <= weeksInMonth; w )
{
<div class="row">
@for (var d = 0; d < 7; d )
{
cellCounter ;
<div class="col">
@{
int day = cellCounter - firstDay;
if (day > 0 amp;amp; day <= daysInMonth)
{
<h1>@day</h1>
}
}
</div>
}
</div>
}