Компонент календаря на JavaScript
Чуть более двух лет назад мне понадобилось написать компонент календаря и прикрутить его к своей CMS. От идеи использования динамического календаря на PHP я сразу отказался. Поскольку нужен был календарь для вставки даты в поля формы. Первое, что я сделал, начал искать готовые решения. Естественно было и много и красивых. Но, как известно, есть пословица “Свой хлеб вкуснее”. И тут мне пришла идея о создании своего календаря. И написать его хотелось только с использованием DOM. В итоге получился календарик, не зависящий от браузеров и разный Фреймворков. Вот собственно который, я и выкладываю для использования.
Все настройки по стилям соответственно находятся в файле calendar.css. Сам скрипт в файле calendar.js.
Для использования компонента, добавляем в HTML код следующее:
- Подключаем файл со стилями – <link href=“calendar.css” rel=“stylesheet” type=“text/css” />;
- Далее подключаем файл со скриптом календаря – <script type=“text/javascript” src=“calendar.js”></script>;
- Затем вставляем в уже предполагаемую ранее созданную форму, поле для даты и объявляем в нем необходимые атрибуты – <input type=“text” name=“date” readonly=“readonly” onclick=“showcalendar(this)”/>.
При клике по полю input у вас должен открыться календарь, чтобы его закрыть еще раз кликните по полю input или выберите дату.
Для изменения разделителя даты, открываем файл calendar.js и ищем функцию showcalendar. В этой функции находим строку var ar = input.value.split(‘.’) и вместо точки прописываем свой разделитель. Для изменения формата даты, открываем все тот же файл calendar.js и ищем функцию generateCalendar. В этой функции находим строку input.value = d + ‘.’ + m + ‘.’ + date.getFullYear(). И изменяем формат вывода по своему требованию. Правда еще тогда придется изменить порядок следования параметров в строке date = new Date (ar[2], ar[1] — 1, ar[0]). Первым параметром должен быть год, вторым – месяц и третий параметр это число дня недели. В JavaScript месяца идут с 0 до 11, поэтому от номера месяца необходимо отнять единицу. Скачать компонент календаря можно здесь.
Антон
11.06.2014 @ 3:11 пп
О браво! это то что я очень долго искал, без громоздких наворотов, простой календарь который подставляет дату.
Николай
26.02.2016 @ 9:51 пп
Вставил на веб-страницу и никаких проблем! Автору спасибо — это мой долг.
Эдуард
06.03.2016 @ 8:43 пп
Спасибо за календарь !!!!! Заработал с полпинка , не то что на других найденных сайтах.
Ваня
30.06.2016 @ 3:27 пп
Все хорошо, только он подсвечивает сегодняшнюю дату.. После выбора. А надо бы что бы подсвечивалась та дата которая выбрана, если второй раз в него ткнуться.
Ваня
30.06.2016 @ 5:01 пп
2 строка — //var currdate = new Date();
113 строка — function generateCalendar(nowdate) {
127 строка добавил — var s = new Date(nowdate);
найти
if (currdate.getFullYear() == date.getFullYear() && currdate.getMonth() == date.getMonth() && currdate.getDate() == countday)
заменить
if (s.getFullYear() == date.getFullYear() && s.getMonth() == date.getMonth() && s.getDate() == countday)
найти в конце функцию function showcalendar(input_date) {
в ней найти
generateCalendar();
и заменить на
generateCalendar(date);
вроде ничего не забыл. теперь работает.
Ярослав
28.04.2017 @ 1:08 пп
А как сделать чтобы календарь открывался не «вниз», а «вверх» ?
admin
01.05.2017 @ 12:19 дп
Доброй ночи!
Вам нужно, что бы верх календаря начинался с верхней границы input или низ календаря начинался с нижней границы input?
Дмитрий
23.05.2017 @ 6:15 пп
Что то не правильно работает календарь. А конкретно выбираю дату 01.05.2017, отправляю запрос в бд, а в бд сохраняется вот так: 2001-05-20
admin
23.05.2017 @ 7:06 пп
Календарь, это всего лишь компонент. Он к вашей БД не имеет никакого отношения. О преобразовании полученных данных вы уже должны заботиться сами.
Константин
01.10.2017 @ 9:40 дп
Подскажите, а как сделать, что бы после выбора даты в календаре, эта дата прописалась справа от календаря текстом?
admin
01.10.2017 @ 6:25 пп
Добрый день!
Полученную дату вставляем в элемент: пример.
Vlad
19.01.2018 @ 8:57 пп
Привет у меня проблема, в шапке сайта ваш скрипт работает а вот в теле нет, там проблема с стилями, но я не могу понять какая…
admin
21.01.2018 @ 11:21 пп
Доброй ночи!
В календаре стилей немного. Что мешает найти конфликтующие стили?
Дмитрий
01.09.2018 @ 2:04 пп
Спасибо большое автор, замечательный компонент, чистый понятный код!