Для создания простого календаря на один месяц с использованием PHP, вы можете использовать следующий код:
```php
<?php
function drawCalendar($month, $year) {
// Получение первого дня месяца и его количества дней
$firstDay = new DateTime("$year-$month-01");
$daysInMonth = $firstDay->format('t');
// Получение дня недели первого дня месяца
$startDayOfWeek = $firstDay->format('w'); // w: 0 (воскресенье) - 6 (суббота)
echo "<table border='1'>";
echo "<tr>";
echo "<th>Вс</th><th>Пн</th><th>Вт</th><th>Ср</th><th>Чт</th><th>Пт</th><th>Сб</th>";
echo "</tr><tr>";
// Печать пустых ячеек для дней, предшествующих первому дню
for ($i = 0; $i < $startDayOfWeek; $i++) {
echo "<td></td>";
}
// Печать дней месяца
for ($day = 1; $day <= $daysInMonth; $day++) {
echo "<td>$day</td>";
// Если день - суббота (6), то начинаем новую строку
if (($day + $startDayOfWeek) % 7 == 0) {
echo "</tr><tr>";
}
}
// Закрытие последней строки таблицы
echo "</tr>";
echo "</table>";
}
// Пример использования функции для текущего месяца
drawCalendar(date('n'), date('Y'));
?>
```
Теперь, чтобы сдвинуть вывод на один день вперёд, вы можете изменить внутренности цикла, не меняя условия самого цикла. Например, можно просто начать цикл с нуля, а не с единицы, и выводить `($day + 1)`:
Измените эту строку в цикле:
```php
for ($day = 1; $day <= $daysInMonth; $day++) {
```
на
```php
for ($day = 0; $day < $daysInMonth; $day++) {
```
И внутри этого цикла поменяйте вывод:
```php
echo "<td>$day</td>";
```
на
```php
echo "<td>".($day + 1)."</td>";
```
Таким образом, ваш цикл будет выглядеть следующим образом:
```php
for ($day = 0; $day < $daysInMonth; $day++) {
echo "<td>".($day + 1)."</td>";
// Проверка, если день - суббота (6), то начинаем новую строку
if (($day + $startDayOfWeek + 1) % 7 == 0) { // +1 чтобы сдвинуть на один день вперед
echo "</tr><tr>";
}
}
```
Этот способ позволит вам сдвинуть вывод календаря на один день вперёд, не изменяя основное условие цикла.