Important! Please read this blog post

Version 4


Bug Squashing

  • fixed moment dependencies to all be the same
  • defaulted option.timeZone to '' instead of UTC. This way it will default to the local timezone if it's not set.
  • fixed #959
  • fixed #1311 internal getMoment function no longer sets startOf('d')
  • fixed #935


  • moved some (will move the rest soon) inline docs to JSDoc now that ReSharper supports it.
  • moved getter/setter functions to options page instead. #1313


New Features

  • Momentjs TZ intergration #1242 thanks @bodrick
  • Independent CSS file, in case you don't want bootstrap for some reason

Bug Squashing

  • Slight changes decade view
  • Moved all tooltip text to tooltips
  • fixed #1212


New Features

tooltips allows custom, localized text to be included for icon tooltips

Bug Squashing

fixed #1066

fixed #1087 sideBySide properly supports toolbarPlacement [top, bottom]

fixed #1119

fixed #1069 added input.blur()

fixed #1049 fixed doc example

fixed #999 picker now looks for an element with .input-group-addon


New Features

disabledTimeIntervals #644

allowInputToggle #929

focusOnShow #884

public viewDate function #872

enabledHours and disabledHours.

dp.update fires when viewDate is changed (in most cases) #937

viewMode now supports a decades view.

Note: because the year picker shows 12 years at a time, I've elected to make this view show blocks of 12 years

Note: when selecting a decade the viewDate will change to the center of the selected years

parseInputDate #1095

Bug Squashing

fixed #815 by adding .wider when using both seconds and am/pm.

fixed #816 changed both min/max date to move the selected date inside.

fixed #855 #881 fillDate, fillMonths, fillDow uses startOf('day'), which will hopefully fix the DST issues.

fixed #885 daysOfWeekDisabled will move the date to a valid date if useCurrent is true. Today button will check if the DoW is disabled.

fixed #906

fixed #912 if useCurrent:false month and year view will no longer have the current month/year selected.

fixed #914 use24hours will ignore anything in side of [] in the format string.

fixed #916 added titles to all icons. At some point the text should be moved to the icon's array, but this would probably be a breaking change.

fixed #940 added -1 tab index to am/pm selector

Other Changes

changed in/decrement behavior to check if the new date is valid at that granularity (hours, minutes, seconds). will also validate as before


Added several in new features:

`keybinds`, `inline`, `debug`, `clear()`, `showClose`, `ingoreReadOnly`, `datepickerInput` and `keepInvalid`.

Bug squashing


Changes for using the component

  • Defined a Public API and hidden rest of functions, variables so that all configuration options can be changed dynamically.

  • set/getDate() is now replaced with an overloaded date() function. Use it without a parameter to get the currently set date or with a parameter to set the date.

  • hide(), show(), toggle(), enable(), disable() and the rest of setter functions now support chaining. ie $('#id').data('DateTimePicker').format('DD-MM-YYYY').minDate(moment()).defaultDate(moment()).show() works

  • Replaced previous - next buttons in Date subviews with configurable icons

  • Changed language option name to locale to be inline with moment naming

  • Implemented #402 all data-date-* variables are more readable and also match with the ones in the configuration object

  • options.direction and options.orientation were merged into a single object options.widgetPositioning with vertical and horizontal keys that take a string value of 'auto', 'top', 'bottom' and 'auto', 'left', 'right' respectively. Note that the 'up' option was renamed to 'top'

Added functionality

  • added a second way to define options as data attributes. Instead of adding distinct data-date-* config options you can now also pass a data-date-options attribute containing an object just the same as the options object that element.datetimepicker constructor call takes

  • also added a options() public api function to get/set that takes an option object and applies it to the component in one call

  • Implemented #130 by introducing a boolean options.calendarWeeks and calendarWeeks() api function

  • Implemented #328, #426

  • Implemented #432. Widget DOM element is now lazily added only when shown and removed from the document when hidden.

  • Implemented #141 and #283

  • Refactor all UI click functions and put them as functions in the actions array private variable

  • Refactor template building process to seperate functions according to what they do

  • Remove some styles that where hardcoded in the javascript code

  • Refactor all code that changes the to change it through the setValue function to allow one place for validation logic (min/max/weekdaysenabled etc) and also one place for emmiting dp.change events

  • The v4beta branch code includes all fixes up to v.3.1.2

  • Added toggle() to the public API which toggles the visibility of the DateTimePicker

  • Refactored set function to be included in the setValue function

  • Added a testing framework using jasmine and phantom.js

Version 3


  • Fix for #170, #179, #183: Changed event to dp.-. This should fix the double change event firing.
  • Fix for #192: setDate now fires dp.change
  • Fix for #182: Picker will not set the default date if the input field has a value
  • Fix for #169: Seconds doesn't get reset when changing the date (Thanks to PR #174)
  • Fix for #168 z-index fix for BS modal
  • Fix for #155 Picker properly displays the active year and month
  • Fix for #154 CSS update to fix the collapse jump
  • Fix for #150 and #75 minViewMode and viewMode work properly
  • Fix for #147 AM/PM won't toggle when selecting a value from the hours grid
  • Fix for #44 Finally! It's here!! Thanks to @ruiwei and his code on #210 picker will adjust the positioning of the widget.

Manually merged PR

  • PR #178 When using minuteStepping the minute select grid will only show available steppings
  • PR #195, #197 Using the data-OPTION has been changed to data-date-OPTION. These options are expected to be on the input-group if you're using the input-group or the a bare input field if you're not using the input-group
  • PR #184 The option sideBySide change be used to display both the d and the timepicker side by side
  • PR #143 Added option daysOfWeekDisabled: []. For example, use daysOfWeekDisabled: [0,6] to disable Sunday and Saturday

Other Changes

  • Changed picker width to 300px if using seconds and am/pm
  • Added option useCurrent, thanks to @ruiwei. When true, picker will set the value to the current date/time (respects picker's format)
  • Added option showToday, thanks to @ruiwei. When true, picker will display a small arrow to indicate today's date.
  • Changed startDate to minDate and endDate to maxDate to make it more clear what these options do.

Version 2

2.1.32 (Hotfix)

  • Fix for #151: When a bad date value or the picker is cleared, the plugin will not longer attempt to reset it back to the previous date
  • Fix for #140: setDate can be given null to force clear the picker


Important! build.less file name has been been changed to bootstrap-datetimepicker-build.less to prevent collisions
  • Fix for #135: setStartDate and setEndDate should now properly set.
  • Fix for #133: Typed in date now respects en/disabled dates
  • Fix for #132: En/disable picker function works again
  • Fix for #117, #119, #128, #121: double event change event issues should be fixed
  • Fix for #112: change function no longer sets the input to a blank value if the passed in date is invalid

  • Enhancement for #103: Increated the z-index of the widget


  • Fix for #83: Changes to the picker should fire native change event for knockout and the like as well as change.dp which contains the old date and the new date
  • Fix for #78: Script has been update for breaking changes in Moment 2.4.0
  • Fix for #73: IE8 should be working now

  • Enhancement for #79: minuteStepping option takes a number (default is 1). Changing the minutes in the time picker will step by this number.

  • Enhancement for #74 and #65: useMinutes and useSeconds are now options. Disabling seconds will hide the seconds spinner. Disabling minutes will display 00 and hide the arrows
  • Enhancement for #67: Picker will now attempt to convert all data-OPTION into its appropriate option


  • Fix for #51, #60
  • Fix for #52: Picker has its own moment object since moment 2.4.0 has removed global reference
  • Fix for #57: New option for useStrict. When validating dates in update and change, the picker can use a stricter formatting validation
  • Fix for #61: Picker should now properly take formatted date. Should also have correct start of the week for locales.
  • Fix for #62: Default format will properly validate time picker only.


  • Custom icons, such as Font Awesome, are now supported. (#49)
  • If more then one input-group-addon is present use datepickerbutton to identify where the picker should popup from. (#48)
  • New Event: error.dp. Fires when Moment cannot parse the date or when the timepicker cannot change because of a disabledDates setting. Returns a Moment date object. The specific error can be found be using invalidAt(). For more information see Moment's docs
  • Fix for #42, plugin will now check for A or a in the format string to determine if the AM/PM selector should display.
  • Fix for #45, fixed null/empty and invalid dates
  • Fix for #46, fixed active date highlighting
  • Fix for #47, change.dp event to also include the previous date.


  • New event error.dp fires when plugin cannot parse date or when increase/descreasing hours/minutes to a disabled date.
  • Minor fixes


  • disabledDates is now an option to set the disabled dates. It accepts date objects like new Date("November 12, 2013 00:00:00") and 12/25/2013' andmoment` date objects
  • Events are easier to use