Как вставить календарь в html

Календарь

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

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

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

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

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

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

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

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

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

HTML5 IE Cr Op Sa Fx

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

HTML5 IE Cr Op Sa Fx

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

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

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

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

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

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

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

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

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

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

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

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

Источник

Календарь для сайта | 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 В стилях что ниже, то и имеет приоритет. Так текущая дата

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

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

Источник

Как создать красивый виджет Календарь

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

Шаг 0. Идея

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в htmlКак вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в htmlКак вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

Шаг 1. HTML-код

Мы начнем с создания нашей структуры HTML. Конечно, мы начнем с каркаса:

Я открою вам один секрет: когда я изначально построил пользовательский интерфейс этого календаря, у меня была только одна таблица с thead для дней и tbody для сетки календаря; но как только я начал писать JavaScript для переключения между месяцами, стало очевидно, что мне нужно использовать что-то более гибкое. Вы поймете, почему, когда мы доберемся до JavaScript.

Итак, это идет в заголовок:

Содержимое table#days довольно простое:

Наконец, у нас есть внутренности div#cal-frame ; проверьте их, и затем мы обсудим это:

Полный скринкаст

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

Итак, что у нас здесь? В принципе, мы создаем сетку календаря с таблицей (позже мы будем динамически вставлять текущий месяц). Соответствующие ячейки имеют номера дат; если ячейки пусты, у них есть класс «nul»; наконец, сегодняшняя дата имеет класс «today».

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в htmlКак вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в htmlКак вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

Шаг 2. CSS

Начнем с некоторого окружения:

Довольно очевидно, а? После установки цвета фона мы центрируем виджет календаря горизонтально и даем ему тень окна. Конечно, мы устанавливаем шрифт. Но почему мы устанавливаем отображение в таблицу? По умолчанию div будет отображаться в виде блока, что означает, что он займет всю доступную ширину; отображая его как таблицу, он будет занимать наименьшую ширину (пока он все еще содержит его дочерние элементы) и по-прежнему является блочным элементом.

Затем давайте сосредоточимся на панели заголовка:

Вот первая часть стиля заголовка; мы начинаем с установки курсора на указатель; текст, как правило, не будет выбираться. Затем мы установим красный цвет фона; однако, если браузер поддерживает его, мы будем использовать фоновый градиент: не забудьте добавить его как для mozilla, так и для webkit! Затем установите высоту 34px; мы установим положение относительное, потому что дочерние элементы будут позиционированы абсолютно; по положению родительского элемента относительно, дочерние будут помещены абсолютно по отношению к родителю, а не к body. Установите цвет текста на белый, вокруг верхнего левого и правого углов и сделайте шрифт полужирным. Затем создайте небольшую текстовую тень, чтобы текст выглядел c отступом. Наконец, преобразуйте текст в верхний регистр.

Каждый из элементов в заголовке представляет собой span ; каждый из них будет отображаться как встроенный блок. Также дайте им высоту строки 34px (высота заголовка).

Эти span также имеют некоторые специальные классы, поэтому давайте посмотрим на них:

Во-первых, у нас класс «hook»; помните, что это хуки или привязки календаря. Мы установим ширину и высоту. Затем расположите это абсолютно. Затем мы сдвинем его снизу на 60%. Мы закроем угол, чтобы обернуть привязки. Затем мы установим цвет фона; если браузер поддерживает градиенты, мы переопределим сплошной фон с градиентом. Затем мы дадим им тень коробки.

Затем мы будем использовать классы местоположения, чтобы расположить хуки горизонтально; если элемент имеет как классы как «hook», так и «right», то переместите его на 15% справа; если у него есть класс «left», переместите его на 15% слева.

Теперь у нас есть кнопки переключения месяца:

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

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

Есть еще один элемент для стилизации: это метка месяца.

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

Хорошо, давайте перейдем к заголовкам дней.

Затем добавим определенный стиль для ячеек таблицы в таблице дней: мы немного уменьшим их высоту и высоту строки, убедитесь, что они в верхнем регистре, и сбросьте размер шрифта и цвет текста. (Примечание: в сопроводительном скринкасте я написал #day вместо #days в селекторе для третьего блока выше и никогда не исправлял это, убедитесь, что вы поняли это правильно!)

Для чего это последнее правило? Ну, в настоящее время на ячейках имен дней есть светло-серые границы. Мы хотим изменить цвет границ справа на белый, чтобы они не были видны. Однако мы не хотим делать это у последней ячейки в строке. Итак, мы можем использовать два псевдокласса. :not будет принимать параметр «исключающий селектор». :last-child захватывает последний дочерний элемент, который мы уже выбрали: в этом случае это ячейки таблицы. Затем мы просто установим правую границу сплошным белым.

Следующее правило применяет эффект зависания ко всем ячейкам таблицы в сетке календаря, за исключением тех, которые с классом «nil»; мы устанавливаем текст в белый цвет и добавляем текстовую тень. Затем мы меняем фон на красный, используя градиент, когда можем. Мы включаем удаление теневой коробки специально для ячейки с классом «today».

То, как мы отметим это, заключается в том, что каждую дату в ячейке таблицы помещаем в span.

Мы сделаем еще одну вещь; когда мы переключаемся между месяцами, мы хотим чтобы один медленно исчезал; для этого требуется, чтобы две таблицы находились поверх друг друга. Мы можем достичь этого:

Тот, который мы угасаем, будет иметь класс «temp»; новый, который мы показываем, чтобы остаться (на некоторое время), будет иметь класс «curr».

И все это с помощью CSS! Теперь перейдем к некоторой функциональности.

Шаг 3. JavaScript

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

Таким образом, мы создаем три функции внутри нашей функции CALENDAR; одна будет инициализировать виджет календаря, вторая будет перемещаться между месяцами, а третья будет создавать сетку календаря; обратите внимание на строку: createCal.cache = <>; мы обсудим это тоже!

Вот содержание нашей функции init :

Перейдем к функции switchMonth :

Мы установим несколько переменных вверху; мы разбиваем метку на массив под названием curr ; мы также создаем переменную calendar и захватываем год текущего календаря.

Затем все становится сложнее. Я использовал условные операторы JavaScript, поэтому я могу поместить все это на одну строку. Вот что они делают:

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

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

Затем мы создаем календарь и соответствующим образом корректируем DOM:

Мы обсудим, почему свойство calendar является методом, когда мы его создаем. А пока вернемся, чтобы поместить его на страницу. Мы получим фрейм календаря и найдем текущий календарь. Затем мы удалим класс «curr» и применим класс «temp»; затем мы помещаем новый календарь (который, кстати, идет с классом «curr»), а затем старый календарь исчезает и удаляется.

Затем мы создаем массив, который содержит количество дней в каждом месяце; для февраля нам нужно учитывать високосные годы, поэтому используйте другое тернарное выражение для расчета.

Вот что происходит: есть вероятность, что пользователь «запросит» один и тот же месяц более одного раза. Как только мы создадим его в первый раз, нет необходимости делать это снова; мы поместим его в кеш и вытащим его позже.

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

Затем нам нужно начать создавать календарь для запрошенного месяца.

Если мы не на первой неделе ( i! == 0 ), то мы будем следить за тем, чтобы у нас осталось несколько дней, чтобы добавить в календарь; если это так, мы вставляем их в слоты. Наконец, если мы не на первой неделе, и у нас нет дней, чтобы добавить месяц, мы вместо этого добавим пустую строку. Затем мы установим hasDays в false.

В конце мы проверим, будет ли day больше, чем количество дней в месяце; если это так, мы установим hasDays в false. Это для специального случая, когда месяц заканчивается в субботу.

Конечно, не забывайте увеличивать i за пределами цикла for!

Теперь пришло время конкатенации каждой недели в нашем calendar ; мы будем перебирать каждую из них в цикле for и переносить записи в строки таблицы, каждый день внутрь ячейки таблицы. Затем мы превратим все это в объект jQuery, после объединения всех строк таблицы и упаковки их таблицей. Затем мы добавим класс «curr» к этой таблице.

Все пустые ячейки таблицы (мы можем использовать псевдоселектор jQuery :empty, чтобы найти их), получат класс «nil».

Если мы создадим календарь для текущего месяца, мы найдем ячейку на сегодняшний день и дадим ей класс «today»; мы можем найти его, передав функцию в метод jQuery filter. Функция возвращает true, если текст ячейки соответствует дате.

Готово! Вернемся в файл index.html, добавим тег скрипта с этим:

Вот оно! Вот как выглядит наш готовый продукт!

Как вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в htmlКак вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в htmlКак вставить календарь в html. Смотреть фото Как вставить календарь в html. Смотреть картинку Как вставить календарь в html. Картинка про Как вставить календарь в html. Фото Как вставить календарь в html

Но я не могу показать вам функциональность; вам нужно будет проверить код самостоятельно! Спасибо за прочтение!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Ноябрь

Пн

Вт

Ср

Чт

Пт

Сб

Вс

Декабрь

Пн

Вт

Ср

Чт

Пт

Сб

Вс

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

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

В коде выше в 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 += ‘