AIR DATEPICKERlightweight cross-browser jQuery datepicker
Description
Light (~36kb minified js file and
~9kb gziped) customizable cross-browser calendar, built withes5andcss flexbox.Works in all modern browsers:
IE 10+, Chrome, Firefox, Safari
8+, Opera 17+.
Pass parameter{multipleDates: true}for selection
of multiple dates. If you want to limit the number of selected dates, pass the desired
number{multipleDates: 3}.
// Make Sunday and Saturday disabled
var disabledDays = [0, 6];
$('#disabled-days').datepicker({
language: 'en',
onRenderCell: function (date, cellType) {
if (cellType == 'day') {
var day = date.getDay(),
isDisabled = disabledDays.indexOf(day) != -1;
return {
disabled: isDisabled
}
}
}
})
Custom cells content
Air Datepicker allows you to change
contents of cells like you want. You could useonRenderCellfor
this purpose.
Lets add extra elements to several dates, and show `lorem` text when selecting them.
Example
var eventDates = [1, 10, 12, 22],
$picker = $('#custom-cells'),
$content = $('#custom-cells-events'),
sentences = [ … ];
$picker.datepicker({
language: 'en',
onRenderCell: function (date, cellType) {
var currentDate = date.getDate();
// Add extra element, if `eventDates` contains `currentDate`
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 with event is selected, show it
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)
}
})
// Select initial date from `eventDates`
var currentDate = currentDate = new Date();
$picker.data('datepicker').selectDate(new Date(currentDate.getFullYear(), currentDate.getMonth(), 10))
Showing and hiding calendar
For adding some actions while
datepicker is showing or hiding, useonShowandonHidecallbacks.
More detailed info about timepicker parameters you can find in Options.
Time format
Time format is defined in localization object
or intimeFormatparameter. By
default (in Russian language) 24 hours format is used. For enabling 12 hours mode you must
addaaorAAsymbol intimeFormat. After what 'AM'
and 'PM' sings will appear in timepicker widget.
For setting max/min hours or minutes values
usemaxHours,minHours,maxMinutes,minMinutes. You also could set
time inminDateandmaxDate. For setting hours you
must use values between 0 and 23, event if 12 hours mode is on. Plugin will automatically
transform given values to 12 hours format.
Lets create calendar where user can choose
time between 09:00 am and 06:00 pm on working days and on Saturday and Sunday between from
10:00 am to 04:00 pm.
Example
<input type='text' id='timepicker-actions-exmpl' />
<script>
// Create start date
var start = new Date(),
prevDay,
startHours = 9;
// 09:00 AM
start.setHours(9);
start.setMinutes(0);
// If today is Saturday or Sunday set 10:00 AM
if ([6, 0].indexOf(start.getDay()) != -1) {
start.setHours(10);
startHours = 10
}
$('#timepicker-actions-exmpl').datepicker({
timepicker: true,
language: 'en',
startDate: start,
minHours: startHours,
maxHours: 18,
onSelect: function (fd, d, picker) {
// Do nothing if selection was cleared
if (!d) return;
var day = d.getDay();
// Trigger only if date is changed
if (prevDay != undefined && prevDay == day) return;
prevDay = day;
// If chosen day is Saturday or Sunday when set
// hour value for weekends, else restore defaults
if (day == 6 || day == 0) {
picker.update({
minHours: 10,
maxHours: 16
})
} else {
picker.update({
minHours: 9,
maxHours: 18
})
}
}
})
</script>
Localization
You can add your localization to object$.fn.datepicker.language["my-lang"]and
pass it name to parameterlanguage
// Add custom localization
$.fn.datepicker.language['my-lang'] = {...}
// Initialize datepicker with it
$('.my-datepicker').datepicker({
language: 'my-lang'
})
You can also pass localization object directly inlanguage
Available localizations located indist/js/i18ndirectory.
Options
classes
Typestring
Defaults""
Extra css classes for datepicker.
inline
Typeboolean
Defaultsfalse
If true, then datepicker will be always visible.
language
Typestring|object
Defaults"ru"
Datepicker's language. If string is passed, then language will be searched inDatepicker.languageobject.
If object is passed, then data will be taken from this object directly.
If some
fields are missing, they will be taken from default localization object ('Russian').
startDate
TypeDate
Defaultsnew Date()
This date will be shown at first initialization.
firstDay
Typenumber
Defaults""
Day index from which week will be started. Possible values are from 0 to 6, where 0 -
Sunday and 6 - Saturday.
By default value is taken from current localization, but if it passed here then it will
have higher priority.
weekends
Typearray
Defaults[6, 0]
Array of day's indexes which will be considered as weekends. Class.-weekend-will be added to
relevant cells.
. By default its Saturday and Sunday.
dateFormat
Typestring
Defaults""
Desirable date format. It's combination of d, m, yyyy, D, M, etc. By default value is
taken from current localization, but if it passed here, then it will have higher
priority.
@- time in milliseconds
d- date number
dd- date with leading zero
D- short day name
DD- full day name
m- month number
mm- month number with leading
zero
M- short month name
MM- full month name
yy- two digit year number
yyyy- four digit year number
yyyy1- first year of decade,
which included current year
yyyy2- last year of decade, which
included current year
altField
Typestring|jQuery
Defaults""
Alternative text input. UsealtFieldDateFormatfor date formatting.
altFieldDateFormat
Typestring
Defaults"@"
Date format for alternative field.
toggleSelected
Typeboolean
Defaultstrue
If true, then clicking on selected cell will remove selection.
keyboardNav
Typeboolean
Defaultstrue
If true, then one can navigate through calendar by keyboard.
Hot keys:
Ctrl + → | ↑- move one
month forwards
Ctrl + ← | ↓- move one
month backwards
Shift + → | ↑- move one
year forwards
Shift + ← | ↓- move one
year backwards
Alt + → | ↑- move 10
years forwards
Alt + ← | ↓- move 10
years backwards
Ctrl + Shift + ↑- move to
next view
Esc- hides datepicker
position
Typestring
Defaults"bottom left"
Position of datepicker relative to text input. First value is name of main axis, and
second is position on that axis.
For example{position: "right top"}-
will set datepicker's position from right side on top of text input.
offset
Typenumber
Defaults12
Offset from the main positioning axes.
view
Typestring
Defaults"days"
Start datepicker view. Possible values are:
days- display days of
one month
months- display months
of one year
years- display years of
one decade
minView
Typestring
Defaults"days"
Minimal datepicker's view, on that view selecting cells will not trigger rendering next
view, instead it will activate it.
Possible values are the same as inview.
showOtherMonths
Typeboolean
Defaultstrue
If true, then days from other months will be visible.
selectOtherMonths
Typeboolean
Defaultstrue
If true, then one can select days form other months.
moveToOtherMonthsOnSelect
Typeboolean
Defaultstrue
If true, then selecting days from other month, will cause transition to that month.
showOtherYears
Typeboolean
Defaultstrue
If true, then years from other decades will be visible.
selectOtherYears
Typeboolean
Defaultstrue
If true, then on can select years from other decades
moveToOtherYearsOnSelect
Typeboolean
Defaultstrue
If true, then selecting year from other decade, will cause transition to that decade.
minDate
TypeDate
Defaults""
The minimum date for selection. All dates, running before it can't be activated.
maxDate
TypeDate
Defaults""
The maximum date for selection. All dates which comes after it cannot be selected.
disableNavWhenOutOfRange
Typeboolean
Defaultstrue
If true, then at the date, which would be less than minimum possible or more then maximum
possible, navigation buttons ('forward', 'back') will be deactivated.
multipleDates
Typeboolean|number
Defaultsfalse
If true, then one can select unlimited dates. If number is passed, then amount of
selected dates will be limited by it.
multipleDatesSeparator
Typestring
Defaults","
Dates separator, which will be used when concatenating dates to string.
range
Typeboolean
Defaultsfalse
For selecting dates range, turn this option to true.multipleDatesSeparatorwill
be used as dates separator.
todayButton
Typeboolean|Date
Defaultsfalse
If true, then button "Today" will be visible. If Date is passed then click event will
also select passed date.
// Select today
$('.datepicker').datepicker({
todayButton: new Date()
})
clearButton
Typeboolean
Defaultsfalse
If true, then button "Clear" will be visible.
showEvent
Typestring
Defaults"focus"
Event type, on which datepicker should be shown.
autoClose
Typeboolean
Defaultsfalse
If true, then after date selection, datepicker will be closed.
prevHtml
Typestring
Defaults<svg><path d="M 17,12 l -5,5 l 5,5"></path></svg>
Contents of 'next' button.
nextHtml
Typestring
Defaults<svg><path d="M 14,12 l 5,5 l -5,5"></path></svg>
Content of datepicker's title depending on current view, can use same notation as in
parameterdateFormat. Missing
fields will be taken from default values. Html tags are also possible.
$('#my-datepicker').datepicker({
navTitles: {
days: '<h3>Check in date:</h3> MM, yyyy'
}
})
monthsField
Typestring
Defaults"monthsShort"
Field name from localization object which should be used as months names, when view is
'months'.
timepicker
Typeboolean
Defaultsfalse
Iftrue, when timepicker widget will be
added.
dateTimeSeparator
Typestring
Defaults" "
Separator between date and time
timeFormat
Typestring
Defaultsnull
Desirable time format. Taken from localization by default. If value passed here, then it
will be used instead.
For using 12 hours mode, add "aa" or "AA" to yourtimeFormatparameter, e.g.{timeFormat: "hh:ii AA"}Possible values are:
h- hours
hh- hours with leading zero
i- minutes
ii- minutes with leading zero
aa- day period - 'am' or 'pm'
AA- day period capitalized
minHours
Typenumber
Defaults0
Minimal hours value, must be between 0 and 23. You will not be able to choose value lower
than this.
maxHours
Typenumber
Defaults23
Maximum hours value, must be between 0 and 23. You will not be able to choose value
higher than this.
minMinutes
Typenumber
Defaults0
Minimal minutes value, must be between 0 and 59. You will not be able to choose value
lower than this.
maxMinutes
Typenumber
Defaults59
Maximum minutes value, must be between 0 and 59. You will not be able to choose value
higher than this.
hoursStep
Typenumber
Defaults1
Hours step in slider.
minutesStep
Typenumber
Defaults1
Minutes step in slider.
Events
onSelect(formattedDate, date, inst)
Typefunction
Defaultsnull
Callback when selecting date
formattedDatestring-
formatted date.
dateDate|array- JavaScript
Date object
if{multipleDates: true},
then it will be an array of js dates.
instobject- plugin
instance.
onShow(inst, animationCompleted)
Typefunction
Defaultsnull
Callback when calendar is showing.
instObject- plugin
instance.
animationCompletedboolean-
animation indicator.
if itsfalse, when animation has
just begun, iftrue- already ended.
onHide(inst, animationCompleted)
Typefunction
Defaultsnull
Callback when calendar is hiding.
instObject- plugin
instance.
animationCompletedboolean-
animation indicator.
if itsfalse, when animation has
just begun, iftrue- already ended.
onChangeMonth(month, year)
Typefunction
Defaultsnull
Callback when months are changed.
monthnumber- month number
(from 0 to 12), to which transition is done.
yearnumber- year, to which
transition is done.
onChangeYear(year)
Typefunction
Defaultsnull
Callback when year is changed
yearnumber- year, to which
transition is done.
onChangeDecade(decade)
Typefunction
Defaultsnull
Callback when decade is changed
decadearray- array which
consists of two years: first year in decade and last year in decade.
onChangeView(view)
Typefunction
Defaultsnull
Callback when datepicker's view is changed
viewstring- view name, to
which transition is done (days, months, years).
onRenderCell(date, cellType)
Typefunction
Defaultsnull
Callback when datepicker's cell is rendered.
dateDate- current cell
date
cellTypestring- current
cell type (day, month, year).
The callback must return object which may consists of three fields:
{
html: '', // Custom cell content
classes: '', // Extra css classes to cell
disabled: '' // true/false, if true, then cell will be disabled
}
Example
$('#my-datepicker').datepicker({
// Let's make a function which will add class 'my-class' to every 11 of the month
// and make these cells disabled.
onRenderCell: function(date, cellType) {
if (cellType == 'day' && date.getDate() == 11) {
return {
classes: 'my-class',
disabled: true
}
}
}
})
API
Plugin instance is accessible throughdataattribute.
var myDatepicker = $('#my-elem').datepicker().data('datepicker');
myDatepicker.show();
show()
Shows datepicker.
hide()
Hides datepicker.
destroy()
Destroys datepicker.
next()
Renders next month, year or decade, depending on current view.
prev()
Renders previous month, year or decade, depending on current view.
selectDate(date)
dateDate|Array- JavaScriptDate(), or array of dates.
Activates passed date or multiple dates if array is passed. If{multipleDates: false}and date
is already active, then it will be deactivated. If{multipleDates: true}then another active date will be
added.
removeDate(date)
dateDate- JavaScriptDate()
Removes selection from passed date.
clear()
Clears all selected dates.
update(field[, value])
fieldstring|object- field
name which must be updated.
fieldstring|*- new value.
This method updates datepicker's options. After calling this method, datepicker will be
redrawn.
You can update several parameters at one time, just pass in object with necessary
fields.
var datepicker = $('#my-elem').datepicker().data('datepicker');
// Single parameter update
datepicker.update('minDate', new Date())
// Multiple parameters
datepicker.update({
position: "top right",
maxDate: new Date(),
todayButton: true
})
view
Sets new view for datepicker.
datepicker.view = 'months';
date
Sets new viewing date for datepicker, must pass a JavaScript Date objectDate()