Я пытаюсь пройти через 6 дней недели. Я хотел бы показать первый элемент в цикле, как сегодня, с классом CSS «active». И если день – воскресенье, то для начала цикла в «Mon» с «активным» классом.
Я придумал следующее, но не знаю, как правильно соединить все это вместе. Любые подсказки?
$mydays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); foreach ($mydays as $day) { if (date('D') === $day ) { echo '<li class="active">' . $day . '</li>'; } if (date('D') === 'Sun') { echo '<li class="active">Mon</li>'; } else { echo '<li>' . $day . '</li>'; } }
Я бы использовал для этого метод DateTime
и метод DateTime::add()
:
<?php $datetime = new \DateTime(); $listItem = array('<li class="active">', '</li>'); $i = 0; while (true) { if ($i === 6) break; if ($datetime->format('N') === '7' && $i === 0) { $datetime->add(new \DateInterval('P1D')); continue; } echo $listItem[0] . $datetime->format('D') . $listItem[1]; $listItem = array('<li>', '</li>'); $datetime->add(new \DateInterval('P1D')); $i++; }
В принципе, это только начинается сегодня. Если сегодня воскресенье, он будет пропущен. Первый отображаемый день автоматически получит активный класс.
Демо: https://eval.in/69138
<?php $mydays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); $outputvalues = array(); foreach ($mydays as $day) { if (date('D', $timestamp) === $day) { $outputvalues[] = '<li class="active">$day</li>'; } else { $outputvalues[] = '<li>$day</li>'; } } if (date('D', $timestamp) === 'Sun') { if (count($outputvalues) > 0) { $outputvalues[0] = '<li class="active">Mon</li>'; } } foreach ($outputvalues as $value) { echo $value; }
<?php $mydays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); $start = date('w'); for($i = 0, $i++; $i < 6 { if(($start + $1) == 6){ $start-=6; } if($i) { echo '<li>' . $mydays[$i] . '</li>'; } else { echo '<li class="active">' . $mydays[$i] . '</li>'; } }
С этим вы будете ровно 6 дней, и всегда начинайте с сегодняшнего дня.