Календарь в html коде. Календарь HTML

В преддверии нового года возникла весьма тривиальная задача — сделать сайт-календарь, где для каждого месяца необходимо было вывести свой календарь на месяц. Первым этапом решения задачи — стал поиск готовых решений. После перебора десятка приведенных в интернете решений выбор был сделан. Какие-то версии и вовсе оказались нерабочими, какие-то слишком громоздкими — их пришлось бы изрядно «попилить», чтобы получить требуемый результат. Итак, рассмотрим как написать простой календарь на php.

Основа скрипта была найдена на просторах интернета, ошибки были исправлены, кое-что было доделано, в частности добавлена функциональность выделения выходных дней отдельным css-классом.

Реализация календаря на месяц на чистом PHP без использования mySQL, jQuery и т.д. приведена ниже:

"; // вывод дней недели $headings = array("Пн","Вт","Ср","Чт","Пт","Сб","Вс"); $calendar.= ""; for($head_day = 0; $head_day <= 6; $head_day++) { $calendar.= ""; $calendar.= "

".$headings[$head_day]."
"; $calendar.= ""; } $calendar.= ""; // выставляем начало недели на понедельник $running_day = date("w",mktime(0,0,0,$month,1,$year)); $running_day = $running_day - 1; if ($running_day == -1) { $running_day = 6; } $days_in_month = date("t",mktime(0,0,0,$month,1,$year)); $day_counter = 0; $days_in_this_week = 1; $dates_array = array(); // первая строка календаря $calendar.= ""; // вывод пустых ячеек for ($x = 0; $x < $running_day; $x++) { $calendar.= ""; $days_in_this_week++; } // дошли до чисел, будем их писать в первую строку for($list_day = 1; $list_day <= $days_in_month; $list_day++) { $calendar.= ""; // пишем номер в ячейку $calendar.= "
".$list_day."
"; $calendar.= ""; // дошли до последнего дня недели if ($running_day == 6) { // закрываем строку $calendar.= ""; // если день не последний в месяце, начинаем следующую строку if (($day_counter + 1) != $days_in_month) { $calendar.= ""; } // сбрасываем счетчики $running_day = -1; $days_in_this_week = 0; } $days_in_this_week++; $running_day++; $day_counter++; } // выводим пустые ячейки в конце последней недели if ($days_in_this_week < 8) { for($x = 1; $x <= (8 - $days_in_this_week); $x++) { $calendar.= " "; } } $calendar.= ""; $calendar.= ""; return $calendar; } ?>

На вход функция draw_calendar получает порядковый номер месяца и год. Результатом исполнения функции является html-код календаря на заданный месяц. Использовать вышеприведенную функцию несложно, и сможет даже новичок в веб-разработке. Пример ниже выведет календарь на январь 2016 год.

Январь "16

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

Php-календарь на год

Из приведнной выше функции можно легко получить php-скрипт календаря на год, причем на любой. Для этого достаточно в цикле перебрать все месяцы и для каждого из них вызвать функцию вывода календаря на месяц.

Однако при этом потребуется завести массив со списком названий месяцев на русском языке, поскольку получить названия месяцев из php можно лишь на английском.

Код в таком случае будет следующим:

"Январь", 1 => "Февраль", 2 => "Март", 3 => "Апрель", 4 => "Май", 5 => "Июнь", 6 => "Июль", 7 => "Август", 8 => "Сентябрь", 9 => "Октябрь", 10 => "Ноябрь", 11 => "Декабрь"); for ($month = 1; $month <= 12; $month++) { ?>

"16

Примеры приведенные в данном посте вы можете скачать с гитхаба .

Выбор даты применяется на сайтах, торгующих авиа и железнодорожными билетами, ведь посетителя интересует заказ билета на определённый день. Календари также применяются в блогах, где записи систематизируются по дате, и сайтах, связанных с разными событиями, например, спортивными. Так или иначе, календарь востребован и может быть добавлен следующим образом.

На сервер данные передаются в формате ГГГГ-ММ-ДД, например, 22.12.2014, а вид календаря может различаться в зависимости от браузера. Полностью поддерживает календарь пока только Opera, выводя виджет для выбора любой даты (рис. 1).

Рис. 1. Календарь в браузере Opera

Браузер Chrome также поддерживает календарь, но делает это весьма скупо (рис. 2). По сути вы только можете прокручивать дату или вводить её как текст.

Рис. 2. Календарь в Chrome

В примере 1 показано создание календаря для выбора произвольной даты.

Пример 1. Календарь

HTML5 IE Cr Op Sa Fx

Календарь

Выберите дату:

Допустимо ограничить ввод даты заданным значением через атрибуты min и max , они соответственно указывают нижнюю и верхнюю дату. Так, если вам требуется сузить диапазон ввода до ±3 дней от даты 01.06.2012, то код запишется, как показано в примере 2.

Пример 2. Ограничение даты

HTML5 IE Cr Op Sa Fx

Календарь

Выберите дату:

Текущая дата заданная через атрибут value подсвечивается фоном, неактивные дни, которые нельзя выбрать - серым цветом (рис. 3).

Рис. 3. Календарь с диапазоном ввода

Кроме традиционного календаря, в котором можно выбрать дату, месяц и год, существует и календарь только для ввода месяца и недели. Они записываются в таком виде.

Выбор месяца в Opera происходит через аналогичный виджет, но в этом случае нельзя указать конкретную дату (рис. 4).

Рис. 4. Выбор месяца в Opera

На сервер данные поля type="month" пересылаются как ГГГГ-ММ, например, 2014-10.

Похожим образом выглядит и виджет для выбора недели (рис. 5), но дополнительно выводится номер недели и выбрать можно только её. На сервер при этом значение отправляется как 2014-W38, где вначале указывается год, затем через дефис W и после него номер недели от начала года.

Рис. 5. Выбор недели в Opera

В примере 3 показано создание поля для ввода месяца.

Пример 3. Выбор месяца

HTML5 IE Cr Op Sa Fx

Календарь

Укажите месяц:

Оформление календаря

На курсах по JavaScript мы иногда затрагиваем тему построения HTML-календаря. Каркас календаря запрограммировать достаточно быстро, а вот на оформление CSS-стилями время тратить не хочется, потому было решено заранее прописать эти стили отдельной заметкой в блоге для дальнейшего быстрого применения. Пусть у нас есть календарь на июль 2084 года, сверстанный в HTML (фидл). Связь JavaScript с календарем обсудим в какой-нибудь из дальнейших заметок, сейчас лишь заметим, что заполнять подобный календарь вручную (название месяца в HTML-элементе caption, дни недели в th, дни месяца в td), без программирования, на практике никто не будет.

Календарь HTML и CSS-стили

Добавим правила для окраски дней месяца (со свойством background:linear-gradient(…)), классы для выходного дня и текущего дня месяца. Чтобы посмотреть работу классов.holyday и.today , нужно прописать их значения в соответствующих ячейках таблицы. Если речь пойдет только о выходных суббота-воскресение, то можно обойтись без классов, используя селекторы nth-child(…).

Calendar{ border:1px solid #bbb; display: inline-block } .calendar table{ empty-cells: hide; } .calendar caption{ padding: 3px; background: linear-gradient(to bottom,#ddd 10%, #bbb); } .calendar td{ padding: 2px 6px; text-align: center; border:1px solid #ccc; background: linear-gradient(to bottom,#fff 10%, #ddd); border-radius:0 0 3px } .calendar td:hover{ border:1px solid #888; } .calendar .holiday{ background: linear-gradient(to bottom,#fff 10%, #ffc); } .calendar .today{ font-weight:600; border:1px solid #888; }

Обозначения дней недели («Пн», «Вт», «Ср», «Чт», «Пт», «Сб», «Вс»), месяцев («Январь», «Февраль», «Март», «Апрель», «Май», «Июнь», «Июль», «Август», «Сентябрь», «Октябрь», «Ноябрь», «Декабрь») можно взять на сайте локализации виджета jQuery Datepicker (https://github.com/jquery/jquery-ui/blob/master/ui/i18n/datepicker-ru.js), т.е. уже готового календаря с использованием JavaScript и библиотек jQuery и jQuery UI (подробней о