Как сделать календарь на php

Компонент календаря на PHP

Существуют ситуации когда нельзя воспользоваться компонентом календаря созданном на JavaScript. Как правило, это те случаи когда требуется возможность не автоматизировать выбор даты в HTML форме, а возможность привязки неких произошедших или планируемых событий к датам в будущем. Это может быть количество новостей на определенную дату, количество заказанных товаров или совершенных покупок в интернет-магазине и т.д. Т.е. в таких случаях становится очевидной необходимость в наличии связи календаря с базой данных, для получения тех или иных сведений за определенную дату. Конечно, можно было бы создать календарь на JavaScript и для получения данных о наличии тех или иных событий использовать Ajax, но как показывает практика такое решение не является оптимальным. Поэтому данный компонент календаря будет разработан на PHP.

Настройки по стилям для календаря содержатся в файле calendar.css. А PHP скрипт находится в файле calendar.class.

Для работы с календарем, необходимо добавить в нужный вам модуль, следующий код:

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

Комментариев: 10

Роман
26.11.2015 @ 10:49 пп

admin
26.11.2015 @ 11:06 пп

Вам нужно чтобы календарь принимал дату в формате: Y-m-d?

Роман
26.11.2015 @ 11:14 пп

admin
27.11.2015 @ 4:44 пп

Нужно вносить изменения минимум в следующие строки: 54, 56, 57, 60, 116. Изменения связаны с форматом даты.

Александр
22.09.2016 @ 5:57 пп

Возможно ли сделать так что бы в течении года в месяц проходило только определенное количество событий (20 за 30 дней, или 20 за 31 день в зависимости от количества дней в месяце), а на первое число нового месяца счетчик обнулялся?

admin
24.09.2016 @ 3:45 дп

Да, конечно. Вы можете доработать календарь.

Аркадий
14.11.2017 @ 8:55 дп

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

Аркадий
14.11.2017 @ 12:46 пп

date_default_timezone_set(‘Europe/Moscow’);
В начале скрипта 😉

Isanamari
04.01.2018 @ 8:12 пп

Огромное спасибо за код! Он мне очень помог!
Но у меня возникла проблема, при запуске кода праздники почему-то не подчеркиваются( Подскажите в чем может быть проблема?

admin
05.01.2018 @ 3:39 пп

Источник

Календарь (выбор даты) в форме отправки с сайта

на почту соответсвенно все приходит так:
От кого: мое имя
Телефон: 123456789
Пользовались услугами: Да
E-mail клиента: klg@jj.ru
Выбранная услуга: Генеральная уборка квартиры/дома
Выбранный способ оплаты: Наличный расчет
Дополнения: g xdzg sdfg sdfsfdg sdf

Очень нужно добавить еще одно поле с календарем, чтоб можно было легко и непринужденно выбирать дату, на которую клиент хочет заказать услугу.
ну и чтоб это передавалось скрипту, и выводилось в отправленном сообщении.
календарь чтоб выглядел примерно вот так (это чтоб точно стало понятно, о чем прошу): http://ruseller.com/lessons/le. index.html

Выбор даты через календарь
Здравствуйте, можно ли, пожалуйста, сделать так, чтобы вылезал календарь на дате 01.01.2017, но.

Выбор даты или диапазона дат через календарь
Здравствуйте! Подскажите, как реализовать в запросе и в отчете диапазон даты и/или дату через.

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

Реализовать в форме удобный выбор даты и времени
Доброго всем времени! Хочу реализовать в форме удобный выбор даты и времени. Есть несколько идей.

Решение

Здравствуйте.
Во-первых, хочу сказать спасибо. Это отличная форма, легко масштабируемая и простая.
Но есть у неё один недостаток. После отправки запроса, пользователь остаётся на странице mail.php, созерцать «Ваше сообщение успешно отправлено!» без автоматической переадресации и/или кликабельной ссылки для перехода обратно на сайт.
Как часть текста ссылку можно добавить, но при попытке сделать её кликабельной выдаёт ошибку.

Подозреваю, я просто упускаю какую-то мелкую деталь, из-за слабого знакомства с php.
Буду благодарен за любую помощь.

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

Кроме того, я чуток доработал форму, добавив обязательные для заполнения поля с помощью «required», и «подсказки» для заполнения с помощью «placeholder». Делюсь, вдруг кому пригодиться:

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

Календарь с выбором даты
Добрый день! Есть обычный календарь на HTML, нужно нажав на дату сделать, чтобы она.

Календарь с выбором даты
Пытаюсь сделать так что бы при выборе определенной даты в календаре появлялась надпись, но надпись.

Календарь (цикличность от даты)
Доброго времени суток знатоки php! Вопрос который меня мучает. Есть php,css,jq календарь на.

Календарь с возможностью закрашивания текущей даты
Приветствую всех! Я тут читала на форуме и нашла файл календарь хотела спросить как можно сделать.

Читайте также:  как удалить приложение фейсбук с телефона андроид самсунг

Календарь на PHP (передача даты в Javascript)
Есть такой код. Но дата в него попадает с компьютера пользователя. При неправильной установке даты.

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

Источник

Air Datepicker, легкий и красивый выбор даты

Хочу поделиться с вами опытом написания компонента выбора даты для текстового поля.

Результат работы можно посмотреть здесь: Air Datepicker.

Введение

Работая над последним проектом, возникла необходимость добавить в приложение календарь с возможностью выбрать конкретный месяц. Все популярные плагины такую возможность предоставляют, мой выбор остановился на Zebra Datepicker — маленький, функциональный, все здорово. Но некоторых вещей все же не хватало:

Что касается громоздкой разметки, то к ней добавляется еще и табличная верстка, к ячейкам которой без лишних проблем не добавить position: relative;.

Ну и напоследок все же хочется, чтобы была возможность добавить небольшую анимацию, а из-за того, что многие популярные календари используют метод .show(), который задействует свойство display, плавные переходы (transition) добавлять трудоемко.

Разработка

Календарь я разделил на три части:

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

В этой задаче мне помогли getter’ы и setter’ы. Например, при изменении месяца просто присваивается новая отображаемая дата с измененным номером месяца, и внутри геттера вызывается метод перерисовки тела и навигации календаря. Несмотря на то, что можно было бы обойтись и без них, мне данный подход представляется более красивым. К примеру, вот так выглядит метод перехода к следующему месяцу, году или декаде, в зависимости от текущего вида:

В свою очередь внутри геттера происходит вызов отрисовки элементов календаря (упрощенно):

Точно так же происходит переход на другой вид, очень просто:

Формирование разметки

Основа для календаря выглядит следующим образом:

Без таблиц и намека на них. Ячейка является простым

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

Вычисление общего количества дней в месяце

Чтобы сформировать корректный HTML, нужно знать сколько дней в месяце. Для этого используется небольшой трюк с передачей следующего месяца и нулевой даты (в Date() дата месяца начинается с единицы).

Формирование названий дней

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

Использование flexbox

Для позиционирования внутри календаря я использую flexbox. Он с легкостью позволяет отцентрировать контент внутри ячеек, будет по центру во всех браузерах (которые поддерживают эту технологию) и на разных ОС, в отличие от техники задания высоты и такого же междустрочного интервала.

Плюс он позволяет располагать элементы на равноудаленном расстоянии друг от друга всего одной строчкой:

Не нужно беспокоиться о разных значениях ширины, все будет рассчитываться автоматически.

Можно также упомянуть про кнопки «Сегодня» и «Очистить»:

Если их две, они занимают по 50% ото всей ширины, если одна, то она занимает всю ширину. Этого также можно достичь одной строкой:

Это означает, что элемент в случае необходимости может как увеличиваться в размерах, так и уменьшаться, но при этом размеры всех соседей будут одинаковые. Когда кнопка одна, она расширяется на всю ширину, когда две, они пропорционально уменьшаются и занимают по 50%, и т.д. Можно добавлять сколько угодно элементов, у всех них будут одинаковые размеры, и в сумме они будут занимать всю ширину родителя.

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

Позиционирование

Позиция элемента задается двумя значениям:

Для того, чтобы добавить анимацию «подъезжания» к текстовому полю, я добавил вспомогательные классы, которые говорят с какой стороны нужно начинать анимацию. В данном случае этот класс выглядел бы как .-from-top-. За анимацию отвечают css transition и css transform. Это позволяет достичь плавности, а также добавлять кастомные переходы.

Что касается Date()

Как я упоминал вначале, мне не совсем понятны ситуации, когда вместо объекта даты нужно передавать строку. Возможно это удобно при автоматической инициализации, когда параметры нужно передавать через data атрибуты, но для меня все же удобнее просто передать new Date(). Тем более, что запись вида new Date(2015, 11, 17) не особо сложнее ‘2015-12-17’. Поэтому у меня во всех параметрах, где задается дата, необходимо передавать new Date().

Читайте также:  Как сделать лоток с решеткой

Несколько слов об использовании

Мне нравится практика автоматической инициализации плагинов, поэтому для инициализации календаря к текстовому полю достаточно добавить класс ‘datepicker-here’ и все заработает.

Опции можно передать через data атрибуты.

Кастомизируемое содержимое ячейки

В Air Datepicker есть возможность полностью изменять содержимое ячеек. Это позволяет добавлять, например, названия событий или какой-то вспомогательный контент в ячейки. Для этого нужно использовать опцию onRenderCell():

Заключение

В итоге я могу сказать, что получил неплохой опыт, улучшил свои навыки работы с датой и написания документации. Календарь получился небольшим: всего 20kb (минифицированный js файл), но достаточно функциональным, по крайней мере для меня он свои задачи выполняет. Буду рад, если он или эта статья кому-нибудь поможет.

Источник

Календарь для сайта | JavaScript

Вид виджета Описание Код
Скрипт простого календаря HTML
Пн Вт Ср Чт Пт Сб Вс Это основа. В коде даны подробные комментарии. открыть
Как создать календарь со стрелками-переключателями
Пн Вт Ср Чт Пт Сб Вс На большинстве сайтах календарём пользуются для просмотра ближайших дней плюс-минус месяц, например, чтобы определиться с днём недели числа. В листании годов нет необходимости. открыть
Календарь для сайта
Пн Вт Ср Чт Пт Сб Вс Можно сделать календарь, в котором нажатие на год/месяц приводит к появлению списка месяцев, ещё один клик — к выбору годов, ещё — к выбору списка периодов годов. Но на практике это не удобно и не понятно: нужно совершить много кликов, разобраться во всей структуре, а человек хочет поменьше думать. В код добавлен список официальных праздников. открыть
Как сделать календарь с неделями
Пн Вт Ср Чт Пт Сб Вс Полезен на странице сайта института, где учебный процесс завязан на недельных циклах. Для того, чтобы узнать номер недели используется этот скрипт. открыть

Выпадающий календарь в input

Типы input описаны здесь. Среди них есть несколько для дат

вид код формат описание
yyyy-mm-dd дата
yyyy-mm-ddTHH:MM:SS дата и время с часовым поясом, нет поддержки, работает как type=»text»
yyyy-mm-ddTHH:MM:SS дата и время
yyyy-mm год и месяц
yyyy-W год и порядковый номер недели
HH:MM:SS (секунды не обязательны) время

Можно указывать максимальное и минимальное значение

value с сегодняшней датой и текущим временем в input type=»date» на JavaScript

Большой календарь со всеми 12 месяцами на HTML

Январь
Пн Вт Ср Чт Пт Сб Вс
Февраль
Пн Вт Ср Чт Пт Сб Вс
Март
Пн Вт Ср Чт Пт Сб Вс
Апрель
Пн Вт Ср Чт Пт Сб Вс
Май
Пн Вт Ср Чт Пт Сб Вс
Июнь
Пн Вт Ср Чт Пт Сб Вс
Июль
Пн Вт Ср Чт Пт Сб Вс
Август
Пн Вт Ср Чт Пт Сб Вс
Сентябрь
Пн Вт Ср Чт Пт Сб Вс
Октябрь
Пн Вт Ср Чт Пт Сб Вс ‘;
>
> NMitra Про дни каникул: вместо

i, D.getMonth() и D.getFullYear() объединены символами &&
это условие берём в скобки и при необходимости пишем ещё одно условие, также в скобках. Условия объединяются символами ||

#calendar2 tbody td.today

NMitra В стилях что ниже, то и имеет приоритет. Так текущая дата

А так дата каникул

Я бы текущую дату выделила не фоном, а рамкой

Источник

Читайте также:  комитет по управлению имуществом саратовской области инн
Статьи обо всем
Ноябрь
Пн Вт Ср Чт Пт Сб Вс
Декабрь
Пн Вт Ср Чт Пт Сб Вс

Можно сделать большие подсказки (как сделать). Но это базовый образец и усложнять его не хочется.

Полный календарь, где даты идут вслед

В коде выше в JS строку заменить на Строку заменить на

Добавить CSS перед закрывающимся тегом :

68 комментариев:

Закрывающиеся теги не нужны http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#syntax-tag-omission
Точно, querySelector я люблю без меры. Разница с id незначительна.
Вызовы функций, предполагаю, каждый под себя сделает. Зато так понятно что откуда берётся. Учитывая, что я сегодня на код смотрела как в первый раз, сразу в нём разобралась. Анонимный Экспериментировать можно и нужно в процессе саморазвития, но в коммерческих (да и любых других проектах) лучше использовать готовые проверенные и отлаженные решения (их масса беЗплатных). Как пример http://jqueryui.com/datepicker/ или http://plugins.jquery.com/tag/calendar/ (их довольно много, не только джекверных, они кроссбраузерны и кастомизируемы и т.д.). Цените своё время и экономьте средства заказчика. NMitra Согласна. Для себя считаю так. Код пишется для новых версий браузера. В приоритете мобильные телефоны, планшеты, ноутбуки. Они быстро морально устаревают или ломаются. Как ни крути их пользователи установят последние версии браузеров.

Анонимный Спасибо автору за статью. Буду признателен если подскажете как в календаре со стрелками (пример 2) вывести даты с ссылками и подсказками. NMitra В CSS добавьте:

#calendar2 tbody td[title] <
outline: 3px solid green;
background: yellow;
cursor: help;
>
#calendar2 tbody td[title] a <
display: block;
>

NMitra Скрипт будет таким:

#calendarBig <
transform: rotate(-90deg);
>
#calendarBig table tbody td <
transform: rotate(90deg);
> Виталий получается лабуда. Виталий как сделать календарь аналогично как в Виндовс 7, когда изменяешь дату с переходами в месяца, года и десятилетия? NMitra Я могу сделать чтоб ровненько было, но всё равно лабуда получится. Если у вас есть пример, когда дни недели находятся сбоку, приведите его, пожалуйста.

Строку
calendar += ‘

‘ + i;

calendar += ‘

‘ + i; Анонимный это то и так понятно
не понятно то, что это не работает. NMitra Стили нужно более подробно расписывать

#calendarBig table tbody td.holiday, #calendarBig table tbody td.todayPR <
color: blue;
>
#calendarBig table tbody td.todayMYPR <
color: green;
>

См. http://jsfiddle.net/NMitra/srdq5oc7/ Sergey Zavrazhnov Можно чтобы дата была ссылкой на другую страницу, тогда нужно написать data-link (адрес страницы, куда перенаправить пользователя). Одна дата не может вести на несколько страниц [вернее может, но в код нужно внести дополнительные изменения]

Возникла необходимость сделать дату ссылкой на несколько различных страниц. Что нужно в код добавить.
Заранее спасибо NMitra См. http://jsfiddle.net/NMitra/y2qxys9w/ Дмитрий Вашкевич Подскажите, как закрыть для выбора определенные даты в календаре (чтобы они были выделены другим цветом и их нельзя было выбрать для передачи в форму) NMitra Можно в JS, а можно только CSS и HTML.
CSS и HTML (пример http://jsfiddle.net/NMitra/t3uv1jcu/ ):

последним в calendarTable добавьте свои даты, только оставьте пустым data-text=»»

тогда в CSS внесите приблизительно такой стиль

Январь
Пн Вт Ср Чт Пт Сб Вс

Февраль
Пн Вт Ср Чт Пт Сб Вс

Март
Пн Вт Ср Чт Пт Сб Вс

Апрель
Пн Вт Ср Чт Пт Сб Вс

Май
Пн Вт Ср Чт Пт Сб Вс

Июнь
Пн Вт Ср Чт Пт Сб Вс

Июль
Пн Вт Ср Чт Пт Сб Вс

Август
Пн Вт Ср Чт Пт Сб Вс

Сентябрь
Пн Вт Ср Чт Пт Сб Вс

Октябрь
Пн Вт Ср Чт Пт Сб Вс

Ноябрь
Пн Вт Ср Чт Пт Сб Вс

Декабрь
Пн Вт Ср Чт Пт Сб Вс

Ильнарик Как в календаре на 1 месяц прописать события, как в календаре на весь год? Анонимный А можно ли сделать в большом календаре, чтобы на следующий/предыдущий год открывался в новом окне со своим title и description? То же самое и для каждого месяца большого календаря? NMitra Можно создать несколько страниц и без всякого JS, только на HTML сделать календарь.
Можно с помощью PHP, но я не разбиралась как именно. NMitra Пример https://jsfiddle.net/NMitra/LLtqjqcm/ yes_59 Доброго времени суток! Во было бы замечательно если в календаре со стрелками-переключателями добавить выделение государственных праздников, а ещё прекрасней выделенным цветом например недели каникул. Работаю в школе пишу своё пространство. С ув. Александр. NMitra В календаре со стрелками вместо

for(var i = 1; i 1897 && D.getFullYear() 1947)) || // Новый год
(i == 2 && D.getMonth() == 0 && D.getFullYear() > 1992) || // Новый год
((i == 3 || i == 4 || i == 5 || i == 6 || i == 8) && D.getMonth() == 0 && D.getFullYear() > 2004) || // Новый год
(i == 7 && D.getMonth() == 0 && D.getFullYear() > 1990) || // Рождество Христово
(i == 23 && D.getMonth() == 1 && D.getFullYear() > 2001) || // День защитника Отечества
(i == 8 && D.getMonth() == 2 && D.getFullYear() > 1965) || // Международный женский день
(i == 1 && D.getMonth() == 4 && D.getFullYear() > 1917) || // Праздник Весны и Труда
(i == 9 && D.getMonth() == 4 && D.getFullYear() > 1964) || // День Победы
(i == 12 && D.getMonth() == 5 && D.getFullYear() > 1990) || // День России (декларации о государственном суверенитете Российской Федерации ознаменовала окончательный Распад СССР)
(i == 7 && D.getMonth() == 10 && (D.getFullYear() > 1926 && D.getFullYear() 1926 && D.getFullYear() 2004) // День народного единства, который заменил Октябрьскую революцию 1917 года
) <
calendar += ‘

‘ + i;
>else <
calendar += ‘
‘ + i;
>
>
if (new Date(D.getFullYear(),D.getMonth(),i).getDay() == 0) <
calendar += ‘