PHP календарь на месяц

Функция для вывода календаря на заданный месяц.

function getCalendarForMonth($month, $year)
{
    $arMonthDay = array();
    $currentDayUnixTime = strtotime(date("{$year}-{$month}-01"));
    $currentMonth = date('m', $currentDayUnixTime);
    $dayWeekIndex = 1;
    $weekIndex = 1;
    while($month == $currentMonth) {
        $currentDayWeekNumber = date("N", $currentDayUnixTime);
        if($currentDayWeekNumber == $dayWeekIndex) {
            $arMonthDay[$weekIndex][$dayWeekIndex] = date('d', $currentDayUnixTime);
            $currentDayUnixTime = strtotime("+1 day", $currentDayUnixTime);
            $currentMonth = date('m', $currentDayUnixTime);
        }
        else {
            $arMonthDay[$weekIndex][$dayWeekIndex] = "";
        }

        if($dayWeekIndex == 7) {
            $weekIndex++;
            $dayWeekIndex = 1;
        }
        else {
            $dayWeekIndex++;
        }
    }
    if(!empty($arMonthDay[$weekIndex])) {
        $arMonthDay[$weekIndex] = array_pad($arMonthDay[$weekIndex], 7, "");
    }
    return $arMonthDay;
}

Пример

Теперь используя эту функцию можно вывести календарь, например на ноябрь 2017 года

<?php $arMonthDay = getCalendarForMonth(11, 2017); ?>
<table class="table"> <thead> <th>Пн</th> <th>Вт</th> <th>Ср</th> <th>Чт</th> <th>Пт</th> <th>Сб</th> <th>Вс</th> </thead> <tbody> <?php foreach($arMonthDay as $arWeek) { ?> <tr> <?php foreach($arWeek as $day) { ?> <td><?php echo $day;?></td> <?php } ?> </tr> <?php } ?> </tbody> </table>

В результате получится примерно следующая таблица:

ПнВтСрЧтПтСбВс
01 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

Доработки

В зависимости от задачи функцию можно доработать, например добавить отметку о том что день является текущим (сегодняшним).

function getCalendarForMonth($month, $year)
{
    $arMonthDay = array();
    $currentDayUnixTime = strtotime(date("{$year}-{$month}-01"));
    $currentMonth = date('m', $currentDayUnixTime);
    $dayWeekIndex = 1;
    $weekIndex = 1;
    while($month == $currentMonth) {
        $currentDayWeekNumber = date("N", $currentDayUnixTime);
        if($currentDayWeekNumber == $dayWeekIndex) {
            $arMonthDay[$weekIndex][$dayWeekIndex] = array(
                "day" => date('d', $currentDayUnixTime),
                "today" => (date("Y-m-d") == date("Y-m-d", $currentDayUnixTime))
            );
            $currentDayUnixTime = strtotime("+1 day", $currentDayUnixTime);
            $currentMonth = date('m', $currentDayUnixTime);
        }
        else {
            $arMonthDay[$weekIndex][$dayWeekIndex] = array(
                "day" => "",
                "today" => false
            );
        }

        if($dayWeekIndex == 7) {
            $weekIndex++;
            $dayWeekIndex = 1;
        }
        else {
            $dayWeekIndex++;
        }
    }
    if(!empty($arMonthDay[$weekIndex])) {
        $arMonthDay[$weekIndex] = array_pad($arMonthDay[$weekIndex], 7, array(
            "day" => "",
            "today" => false
        ));
    }
    return $arMonthDay;
}

Рубрики: PHP

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

Bitrix сгенерировать ошибку 404

В статье описан метод, который позволяет легко сгенерировать ошибку 404.

Кандинский 3.1 и обновление телеграмм бота

В статье описаны изменения телеграм бота и сравниваются результаты генерации изображений в новой и предыдущей версиях kandinsky.

Bitrix Вывести sql запрос

Порой нужно получить сформированный с помощью ORM sql запрос. Например чтобы проверить, что выбираются нужные данные с нужными фильтрами. Для таких случаев предусмотрен метод startTracker(). Подробнее о том как его использовать описано в статье.

Магия CSS: сделать изображение чёрно-белым

Узнайте, как использовать свойство CSS filter с параметром grayscale для создания черно-белых изображений. В статье написано как применять это свойство и есть наглядный пример его работы.

Ведьмак 3 - игра, которая заслуживает внимания

Ведьмак 3 - легендарная игра в которую до сих пор интересно играть. В этой статье хочется поделится своим мнением о игре. Выделить сильные и слабые стороны.

Bitrix: как подключить js или css файл?

Чтобы подключить JavaScript и CSS файлы в bitrix сущствуют специальные методы addJs и addCss у класса \Bitrix\Main\Page\Asset. Давайте рассмотрим примеры их использования более подробно.

Комментарии

Комментариев пока нет
Данный сайт использует файлы cookies. Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookies.
ОК