html — сопоставляет названия недель с днями недели в переполнении стека

Я пытаюсь сделать календарь с HTML, CSS и PHP. И пока все прошло хорошо. Но в конце я обнаружил, что забыл, что месяцы не всегда начинаются с понедельника.

Образ

Как бы я это сделал? Я не настолько силен в PHP и не могу понять, как бы я это сделал.

В этом месяце например (Декабрь), Мне нужно было бы добавить 5 «скрытых или отключенных» дней вперед, чтобы соответствовать этому 1 декабря это суббота.

<!-- Week Days -->
<ul class="weekdays">
<li>Monday</li>
<li>Tuesday</li>
<li>Wednesday</li>
<li>Thursday</li>
<li>Friday</li>
<li>Saturday</li>
<li>Sunday</li>
</ul>
<!-- Days -->
<ul class="days">
<?php

// Make List
$list = array();
$month = date('m', strtotime('-1 month'));
$year = date('Y', strtotime('-1 year'));

for($d = 1; $d <= 31; $d++){
$time = mktime(12, 0, 0, $month, $d, $year);

if(date('m', $time) == $month)
$list[] = date('d', $time);
}
if(is_array($list) || is_object($list)){
foreach($list as $day){

if($day < date('d')){
echo '<li class="passed"><span>' . $day . '</span></li>';
}else if($day == date('d')){
echo '<li class="current"><span>' . $day . '</span></li>';
}else{
echo '<li><span>' . $day . '</span></li>';
}
}
}
?>
</ul>

0

Решение

Итак, основываясь на вашем примере, вы фактически выводите информацию за ноябрь 2017 года, которая начинается в среду.

Чтобы достичь того, что вы ищете, вам просто нужно выяснить, какой это день недели, а затем добавить дополнительные «пустые» элементы к вашему $list массив, если вам нужно заполнить месяц.

Чтобы узнать день недели, используйте:

... // Your existing code under Make List
$year = date('Y', strtotime('-1 year'));

$date = '01-' . $month . '-' . $year;
$dayofweek = date('w', strtotime($date));

Сейчас $dayofweek будет содержать числовой номер недели, где 0 — воскресенье, 1 — понедельник и т. д.

Затем просто добавьте пустые элементы в массив списка, чтобы добавить количество дней, которое должно быть пустым:

if ($dayofweek == 0) $dayofweek = 7;
for (; $dayofweek > 1; $dayofweek--)
$list[] = '';

Обратите внимание, что там, где день старта — воскресенье, я изменяю его на 7, чтобы заполнить 6 полей.

Наконец, когда вы выводите свои элементы списка, просто добавьте пустой день <li> за каждый дополненный день:

... // Your existing code
foreach($list as $day){
if ($day == '')
echo '<li>Empty day</li>';
else if($day < date('d')){
... // Your existing code continues
1

Другие решения

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

$currentMonth = date('m');
$daysInMonth = date('t');
$currentDay = 0;
$firstOfMonthDay = date('w', strtotime('2017-01-01'));
nextWeek = true;


while(nextWeek){ // displays weekly fields
counter = 1;
while(counter <= 7){ // displays empty box or date
formatBox();
if($firstOfMonthDay == $counter){
// starts printing date
$currentDay++;
}
if($currentDay > 0 && $currentDay <= $daysInMonth){
// prints date while the month has valid days
printDay();
}
$currentDay++;
counter++;
}
if($currentDay < $daysInMonth){
// stops printing new weeks when there are no more valid
// days in the month
nextWeek = false;
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector