Описание
Легкий (~26kb минифицированный js файл и ~7kb gziped), кастомизируемый, кроссбраузерный календарь, написан с использованиемes5
иcss flexbox
. Работает во всех современных браузерах:
IE 10+, Chrome, Firefox, Safari 8+, Opera 17+.
Легкий (~26kb минифицированный js файл и ~7kb gziped), кастомизируемый, кроссбраузерный календарь, написан с использованиемes5
иcss flexbox
. Работает во всех современных браузерах:
IE 10+, Chrome, Firefox, Safari 8+, Opera 17+.
bower i --save air-datepicker
Либо можно скачать файлы напрямую с GitHub
Подключите стили и скрипты из папки/dist
:
<html>
<head>
<link href="dist/css/datepicker.min.css" rel="stylesheet" type="text/css">
<script src="dist/js/datepicker.min.js"></script>
</head>
</html>
Календарь автоматически проинициализируется на элементах с классом.datepicker-here
, при этом опции можно передать черезdata
атрибуты.
<input type='text' class="datepicker-here" data-position="right top" />
// Инициализация
$('#my-element').datepicker([options])
// Доступ к экземпляру объекта
$('#my-element').data('datepicker')
<input type='text' class='datepicker-here' />
Передайте параметр{multipleDates: true}
для выбора нескольких дат. Если требуется ограничить количество выбранных дат, то передайте необходимое число{multipleDates: 3}
.
<input type="text"
class="datepicker-here"
data-multiple-dates="3"
data-multiple-dates-separator=", "
data-position='right top'/>
Проинициализируйте плагин на элементе, который не является текстовым полем, например на<div> … </div>
, либо передайте параметр{inline: true}
.
<div class="datepicker-here"></div>
<input type="text"
class="datepicker-here"
data-min-view="months"
data-view="months"
data-date-format="MM yyyy" />
Чтобы ограничить выбор даты, используйтеminDate
иmaxDate
, которым нужно передать объект даты.
$('#minMaxExample').datepicker({
// Можно выбрать тольо даты, идущие за сегодняшним днем, включая сегодня
minDate: new Date()
})
Используйте парамтер{range: true}
для выбора диапазона. В качестве разделителя дат будет использованmultipleDatesSeparator
<input type="text" data-range="true" data-multiple-dates-separator=" - " class="datepicker-here"/>
Для того, чтобы сделать невозмножным выбрать конкретные дни недели, можно воспользоваться методомonRenderCell
.
// Сделаем неактивными воскресенье и субботу
var disabledDays = [0, 6];
$('#disabled-days').datepicker({
onRenderCell: function (date, cellType) {
if (cellType == 'day') {
var day = date.getDay(),
isDisabled = disabledDays.indexOf(day) != -1;
return {
disabled: isDisabled
}
}
}
})
Air Datepicker позволяет менять содержимое ячеек как угодно. Для этого можно также воспользоваться методомonRenderCell
.
Давайте добавим вспомогательные элементы к нескольким датам и покажем случайный текст при выборе этих дат:
var eventDates = [1, 10, 12, 22],
$picker = $('#custom-cells'),
$content = $('#custom-cells-events'),
sentences = [ … ];
$picker.datepicker({
onRenderCell: function (date, cellType) {
var currentDate = date.getDate();
// Добавляем вспомогательный элемент, если число содержится в `eventDates`
if (cellType == 'day' && eventDates.indexOf(currentDate) != -1) {
return {
html: currentDate + '<span class="dp-note"></span>'
}
}
},
onSelect: function onSelect(fd, date) {
var title = '', content = ''
// Если выбрана дата с событием, то отображаем его
if (date && eventDates.indexOf(date.getDate()) != -1) {
title = fd;
content = sentences[Math.floor(Math.random() * eventDates.length)];
}
$('strong', $content).html(title)
$('p', $content).html(content)
}
})
// Сразу выберем какую-ниудь дату из `eventDates`
var currentDate = currentDate = new Date();
$picker.data('datepicker').selectDate(new Date(currentDate.getFullYear(), currentDate.getMonth(), 10))
Вы можете добавить свою локализацию в объектDatepicker.language["my-lang"]
и при вызове календаря передать название языка в параметрlanguage
Datepicker.language['my-lang'] = {...}
$('.my-datepicker').datepicker({
language: 'my-lang'
})
Также объект локализации можно передавать непосредственно вlanguage
$('.my-datepicker').datepicker({
language: {
days: [...]
...
}
})
Если в вашей локализации не будет хватать каких-то полей, то они будут взяты из языка по умолчанию (русский язык).
Datepicker.language['ru'] = {
days: ['Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'],
daysShort: ['Вос','Пон','Вто','Сре','Чет','Пят','Суб'],
daysMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
months: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
monthsShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
today: 'Сегодня',
clear: 'Очистить',
dateFormat: 'dd.mm.yyyy',
firstDay: 1
};
Типstring
Значение по умолчанию""
Дополнительные классы для календаря.
Типboolean
Значение по умолчаниюfalse
Если true, то календарь будет виден постоянно.
Типstring|object
Значение по умолчанию"ru"
Язык календаря. Если передается строка, то поиск языка будет осуществляться в объектеDatepicker.language
Если передан объект, то данные будут браться из него.
Если в объекте локализации не будет хватать каких то полей, то они будут взяты из языка по умолчанию.
ТипDate
Значение по умолчаниюnew Date()
Дата, которая будет отображаться при инициализации календаря.
Типnumber
Значение по умолчанию""
Индекс дня, с которого начинается неделя. Возможные значение от 0 до 6, где 0 - воскресенье и 6 - суббота. По умолчанию берется из локализации, если значение передать сюда, то оно будет иметь больший приоритет.
Типarray
Значение по умолчанию[6, 0]
Массив индексов дней, которые будут считаться выходными днями. Им будет добавлен класс.-weekend-
. По умолчанию это суббота и воскресенье.
Типstring
Значение по умолчанию""
Желаемый формат даты, кобминация из d, m, yyyy, D, M, и т.д. По умолчанию берется из локализации, если передать значение сюда, то оно будет иметь больший приоритет.
Типstring|jQuery
Значение по умолчанию""
Альтернативное поле воода в значение которого будут попадать выбранные даты с форматомaltFieldDateFormat
.
Типstring
Значение по умолчанию"@"
Формат даты для альтернативного поля.
Типboolean
Значение по умолчаниюtrue
Если true, то клик на выделенной дате снимет выделение.
Типboolean
Значение по умолчаниюtrue
Если true, то по календарю можно будет осуществлять навигацию с помощью клавиатуры.
Сочетания клавиш:
Типstring
Значение по умолчанию"bottom left"
Позиционирование календаря отностиельно текстового поля. Первым значением задается основная ось позиционирования,
воторым - положение на этой оси. Например{position: "right top"}
- утсановит позицию клаендаря справа вверху от текстового поля.
Типnumber
Значение по умолчанию12
Отступ от основной оси позиционирования.
Типstring
Значение по умолчанию"days"
Начальный вид календаря. Возможноые значения:
days
- отображение дней месяцаmonths
- отображение месяцев одного годаyears
- отображение годов одной декадыТипstring
Значение по умолчанию"days"
Минимальное представление календаря, по наступлению которого, выбор ячейки приведет к ее активации, а не переходу к следующему виду.
Возможные значения такие же как и у параметраview
.
Типboolean
Значение по умолчаниюtrue
Если true, то будут отображаться дни других месяцев.
Типboolean
Значение по умолчаниюtrue
Если true, то можно будет выбрать дни из других месяцев.
Типboolean
Значение по умолчаниюtrue
Если true, то при выборе дней из других месяца, будет осуществялться переход к этому месяцу.
Типboolean
Значение по умолчаниюtrue
Если true, то при отображении декады, будут показаны годы из других декад.
Типboolean
Значение по умолчаниюtrue
Если true, то можно будет выбрать года из других декад
Типboolean
Значение по умолчаниюtrue
Если true, то при выборе года из другой декады, будет осуществлен переход к этой декаде.
ТипDate
Значение по умолчанию""
Минимальная дата для возможности выбора. Все даты, идущее до нее нельзя будет активировать.
ТипDate
Значение по умолчанию""
Максимальная дата для возможности выбора. Все даты, идущее после нее нельзя будет выбрать.
Типboolean
Значение по умолчаниюtrue
Если true, то при наступлении даты, которая была бы меньше минимально возможной или больше максимально возможной, деактвировались бы кнопки навигации 'вперед', 'назад'
Типboolean|number
Значение по умолчаниюfalse
Если true, то можно будет выбрать неограниченное количество дат. Если передать число, то количество выбираемых дат будет ограниченно этим числом.
Типstring
Значение по умолчанию","
Разделитель дат, который будет использован при объеденения нескольких дат в одну строку.
Типboolean
Значение по умолчаниюfalse
Если true, то будет включен режим выбора диапазона дат. В качестве разделителя будет использованmultipleDatesSeparator
Типboolean
Значение по умолчаниюfalse
Если true, то будет отображена кнопка "Сегодня".
Типboolean
Значение по умолчаниюfalse
Если true, то будет отображена кнопка "Очистить".
Типstring
Значение по умолчанию"focus"
Тип события, по наступлению которого будет показан календарь.
Типboolean
Значение по умолчаниюfalse
Если true, то при активации даты, календарь закроется.
Типstring
Значение по умолчанию<svg><path d="M 17,12 l -5,5 l 5,5"></path></svg>
Контент кнопки 'предыдущий месяц|год|декада'.
Типstring
Значение по умолчанию<svg><path d="M 14,12 l 5,5 l -5,5"></path></svg>
Контент кнопки 'следующий месяц|год|декада'.
Типobject
Значение по умолчанию
navTitles = {
days: 'MM, <i>yyyy</i>',
months: 'yyyy',
years: 'yyyy1 - yyyy2'
};
Значение заголовка календаря в зависимости от текущего вида, можно использовать те же обозначения что и вdateFormat
. Недостающие поля будут взяты из значения по умолчанию. Также можно использовать html теги.
$('#my-datepicker').datepicker({
navTitles: {
days: '<h3>Выберете дату заезда</h3> MM, yyyy'
}
})
Типstring
Значение по умолчанию"monthsShort"
Какое поле из объекта локализации использовать в качестве названий месяцев, когдаview = "months"
.
Типfunction
Значение по умолчаниюnull
Функция обратного вызова при выборе даты.
Date
выбранной даты, если{multipleDates: true}
, то будет передан массив таких объектов.Типfunction
Значение по умолчаниюnull
Функция обратного вызова при изменении месяца.
Типfunction
Значение по умолчаниюnull
Функция обратного вызова при изменении года.
Типfunction
Значение по умолчаниюnull
Функция обратного вызова при изменении декады.
Типfunction
Значение по умолчаниюnull
Функция обратного вызова при изменении вида календаря
Типfunction
Значение по умолчаниюnull
Функция обратного вызова при отрисовке ячейки календаря.
Функция должна возвращать объект, которой может состоять из трех полей:
{
html: '', // Кастомный контент ячейки
classes: '', // Дополнительные классы для ячейки
disabled: '' // true/false, если true, то ячейку нельзя будет выбрать
}
$('#my-datepicker').datepicker({
// Передаем функцию, которая добавляет 11 числу каждого месяца класс 'my-class'
// и делает их невозможными к выбору.
onRenderCell: function(date, cellType) {
if (cellType == 'day' && date.getDate() == 11) {
return {
classes: 'my-class',
disabled: true
}
}
}
})
Досутп к экземпляру плагина осуществляется черезdata
атрибут.
var myDatepicker = $('#my-elem').datepicker().data('datepicker');
myDatepicker.show();
Показывает календарь.
Скрывает календарь.
Переходит на следующий месяц если вид days, на следующий год если months, и следующую декаду если years.
Переходит на предыдщуий месяц если вид days, на предыдущий год если months, и предыдущую декаду если years.
Date()
Выбирает переданную дату. Если{multipleDates: false}
и уже есть активная дата, то она будет деактивирована. Если{multipleDates: true}
то будет добавлена еще одна активная дата.
Date()
Снимает выделение с переданной даты.
Убирает выделение со всех активных дат.
Обновление опций календаря, после вызова метода он автоматически перерисуется. Можно обновлять сразу несколько параметров, для этого нужно передать объект с требуемыми полями.
var datepicker = $('#my-elem').datepicker().data('datepicker');
// Обновление одного параметра
datepicker.update('minDate', new Date())
// Обновление нескольких параметров
datepicker.update({
position: "top right",
maxDate: new Date(),
todayButton: true
})
Устанавливает новое представление для календаря.
datepicker.view = 'months';
Устанавливает новую отображаемую дату, нужно передать JavaScriptDate()
datepicker.date = new Date();