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 получить путь до зарегистрированного файла

В статье приводится пример того как можно получить путь до зарегистрированного файла по его ID с помощью метода CFile::getPath($fileId). Так же показано где можно получить ID зарегистрированного файла.

Bitrix получить ID текущего покупателя

В статье приводится пример кода для получения ID текущего покупателя в bitrix.

Bitrix подключить модуль

Так как bitrix состоит из большого количества различных модулей, знать как их правильно подключать просто необходимо.

PHP Удалить лишние нули после запятой

Когда в проекте диапазон чисел от 0,0001 до 1 000 000, удобно автоматически удалять лишнии нули после запятой.

Команда grep. Примеры использования

grep - удобная и быстрая команда, здесь приведены примеры как произвести рекурсивный поиск в каталоге, поиск среди запущенных процессов и другие.

Bitrix выполнить произвольный sql запрос

В статье приведен пример как выполнить произвольный sql запрос используя стандартные средства Bitrix

Комментарии

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