Вывод текущего месяца, задваиваются цифры на php
Всем добрый вечер! Нужно вывести месяц, выходные отметить красным, текущую дату обвести. При выводе удваиваются цифры. Подскажите, в чем причина? Заранее спасибо.
<style>
.normal:hover {
background-color: black;
color: white;
}
.weekend:hover {
background-color: red;
color: white;
}
</style>
<?php
echo "<table><tbody><tr>";
for ($i = 1; $i <= 31; $i++) {
echo '<td class="normal" style="color:black" normal:hover">'.$i."</td>";
if ($i == 7 || $i == 14 || $i == 21 || $i == 28) {
echo '<td class="weekend" style="color:red">'.($i-1)."</td>";
echo '<td class="weekend" style="color:red">'.$i."</td>";
echo "</tr>";
}
if ($i == date(j)) {
echo '<td style="border:1px solid blue">'.$i."</td>";
}
}
echo "</tbody></table>";
?>
Ответы (3 шт):
Автор решения: Festina
→ Ссылка
Вот, что получилось. Коряво, что 2 условия на 6 и на 7.
echo "<table><tbody><tr>";
for ($i = 1; $i <= 31; $i++) {
if ($i == 7 || $i == 14 || $i == 21 || $i == 28) {
echo '<td class="weekend" style="color:red">'.$i."</td>";
echo "</tr>";
} elseif ($i == 6 || $i == 13 || $i == 20 || $i == 27) {
echo '<td class="weekend" style="color:red">'.$i."</td>";
} elseif ($i == date(j)) {
echo '<td style="border:1px solid blue">'.$i."</td>";
} else {
echo '<td class="normal" style="color:black" normal:hover">'.$i."</td>";
}
}
echo "</tbody></table>";
Автор решения: mpakfm
→ Ссылка
Как можно делать календарь и не использовать DateTime?
<style>
.month {
width: 350px;
display: block;
}
.month .day {
display: inline-block;
width: 50px;
border: #0000ff 1px solid;
padding: 5px;
color: #1a4580;
}
.month .day.today {
color: white !important;
background-color: green !important;
font-weight: bold;
}
.month .day.invis {
border: none;
}
.month .day.weekend {
color: red;
border: red 1px solid;
}
</style>
<div class="month">
<?php
$dt = new \DateTimeImmutable();
$day = \DateTimeImmutable::createFromFormat('d.m.Y', '01.' . $dt->format('m.Y'));
$dayOfWeek = 1;
while ($dayOfWeek < $day->format('N')) {
?><div class="day invis <?=($day->format('N') > 5 ? 'weekend' : '');?>"></div><?
$dayOfWeek++;
}
while ($day->format('m') == $dt->format('m')) {
?><div class="day <?=($day->format('N') > 5 ? 'weekend' : '');?><?=($day->format('d') == $dt->format('d') ? ' today' : '');?>"><?=$day->format('d');?></div><?
$day = $day->add(new DateInterval('P1D'));
}
?>
</div>
Автор решения: kachulin
→ Ссылка
Календарь на текущий месяц
<?php
$offset = getWeekDay(1) - 1;
$rowNum = (int)((date('t') + $offset) / 7) + 1;
function getWeekDay($day) {
return date('N', strtotime(date('Y-m-' . $day)));
}
function getCssClass($day) {
if (getWeekDay($day) >= 6 ) {
$cssClass = 'weekend';
}
else {
$cssClass = 'normal';
}
if ($day == date('j')) {
$cssClass .= ' today';
}
return $cssClass;
}
?>
<style>
.normal {
color:black;
}
.weekend {
color:red;
}
.today {
border:1px solid blue;
}
</style>
<?= date('d-m-Y') ?>
<table><tbody>
<?php for ($row = 0; $row < $rowNum; $row++) { ?>
<tr>
<?php for ($dayWeek = 1; $dayWeek <= 7; $dayWeek++) { ?>
<?php $day = $row * 7 + $dayWeek - $offset; ?>
<?php if ($day > 0 && $day <= date('t')) { ?>
<td class="<?= getCssClass($day) ?>"><?= $day ?></td>
<?php } else { ?>
<td></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
</tbody></table>
