CoreUI PRO Component
To use this component you must have a CoreUI PRO license. Buy the CoreUI PRO and get access to all PRO components, features, templates, and dedicated support.
Bootstrap 5 Time Picker
Time Picker
Create consistent cross-browser and cross-device time picker.
Other frameworks
CoreUI components are available as native Angular, React, and Vue components. To learn more please visit the following pages.
Example
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="en-US" data-coreui-toggle="time-picker" id="timePicker1"></div>
</div>
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="en-US" data-coreui-time="02:17:35 PM" data-coreui-toggle="time-picker" id="timePicker2"></div>
</div>
</div>
Sizing
Set heights using data-coreui-size
attribute like data-coreui-size="lg"
and data-coreui-size="sm"
.
<div class="row mb-4">
<div class="col-lg-5">
<div class="time-picker" data-coreui-locale="en-US" data-coreui-size="lg" data-coreui-toggle="time-picker"></div>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="en-US" data-coreui-size="sm" data-coreui-toggle="time-picker"></div>
</div>
</div>
Disabled
Add the data-coreui-disabled="true"
attribute on an input to give it a grayed out appearance and remove pointer events.
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-disabled="true" data-coreui-locale="en-US" data-coreui-toggle="time-picker"></div>
</div>
</div>
Readonly
Add the data-coreui-input-read-only="true"
boolean attribute to prevent modification of the input’s value.
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-input-read-only="true" data-coreui-locale="en-US" data-coreui-toggle="time-picker"></div>
</div>
</div>
Non-english locale
Auto
<div class="row">
<div class="col-lg-4">
<div data-coreui-toggle="time-picker"></div>
</div>
</div>
Chinese
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="zh-CN" data-coreui-placeholder="入住日期" data-coreui-toggle="time-picker"></div>
</div>
</div>
Japanese
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="ja" data-coreui-placeholder="日付を選択" data-coreui-toggle="time-picker"></div>
</div>
</div>
Korean
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="ko" data-coreui-placeholder="날짜 선택" data-coreui-toggle="time-picker"></div>
</div>
</div>
Right to left support
RTL support is built-in and can be explicitly controlled through the $enable-rtl
variables in scss.
Hebrew
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="he-IL" data-coreui-placeholder="בחר תאריך" data-coreui-toggle="time-picker" dir="rtl"></div>
</div>
</div>
Persian
<div class="row">
<div class="col-lg-4">
<div class="time-picker" data-coreui-locale="fa-IR" data-coreui-placeholder="تاریخ شروع" data-coreui-toggle="time-picker" dir="rtl"></div>
</div>
</div>
Usage
Via data attributes
Add data-coreui-toggle="time-picker"
to a div
element.
<div data-coreui-toggle="time-picker"></div>
Via JavaScript
Call the time picker via JavaScript:
<div class="time-picker"></div>
const timePickerElementList = Array.prototype.slice.call(document.querySelectorAll('.time-picker'))
const timePickerList = timePickerElementList.map(timePickerEl => {
return new coreui.TimePicker(timePickerEl)
})
Options
As options can be passed via data attributes or JavaScript, you can append an option name to data-coreui-
, as in data-coreui-animation="{value}"
. Make sure to change the case type of the option name from “camelCase” to “kebab-case” when passing the options via data attributes. For example, use data-coreui-custom-class="beautifier"
instead of data-coreui-customClass="beautifier"
.
As of CoreUI 4.2.0, all components support an experimental reserved data attribute data-coreui-config
that can house simple component configuration as a JSON string. When an element has data-coreui-config='{"delay":0, "title":123}'
and data-coreui-title="456"
attributes, the final title
value will be 456
and the separate data attributes will override values given on data-coreui-config
. In addition, existing data attributes are able to house JSON values like data-coreui-delay='{"show":0,"hide":150}'
.
Name | Type | Default | Description |
---|---|---|---|
cancelButtonLabel |
string | 'Cancel' |
Cancel button inner HTML |
cancelButtonClasses |
array | string | ['btn', 'btn-sm', 'btn-ghost-primary'] |
CSS class names that will be added to the cancel button |
cleaner |
boolean | true |
Enables selection cleaner element. |
confirmButtonLabel |
string | 'OK' |
Confirm button inner HTML |
confirmButtonClasses |
array | string | ['btn', 'btn-sm', 'btn-primary'] |
CSS class names that will be added to the confirm button |
container |
string | 'dropdown' |
Set container type for the component.
|
disabled |
boolean | false |
Toggle the disabled state for the component. |
indicator |
boolean | true |
Toggle visibility or set the content of the input indicator. |
inputReadOnly |
boolean | false |
Toggle the readonly state for the component. |
invalid |
boolean | false |
Toggle the invalid state for the component. |
locale |
string | 'default' |
Sets the default locale for components. If not set, it is inherited from the navigator.language. |
placeholder |
string | 'Select time' |
Specifies a short hint that is visible in the input. |
size |
'sm' | 'lg' |
null |
Size the component small or large. |
time |
date | string | null | null |
Default value of the component |
valid |
boolean | false |
Toggle the valid state for the component. |
variant |
'inline' | 'roll' |
'roll' |
Set the time picker variant to a roll or select. |
Methods
Method | Description |
---|---|
clear |
Clear selection of the time picker. |
reset |
Reset selection of the time picker to the initial value. |
update |
Updates the configuration of the time picker. |
dispose |
Destroys a component. (Removes stored data on the DOM element) |
getInstance |
Static method which allows you to get the time picker instance associated to a DOM element, you can use it like this: coreui.TimePicker.getInstance(element) |
getOrCreateInstance |
Static method which returns a time picker instance associated to a DOM element or create a new one in case it wasn’t initialized. You can use it like this: coreui.TimePicker.getOrCreateInstance(element) |
Events
Method | Description |
---|---|
timeChange.coreui.time-picker |
Callback fired when the value changed. |
show.coreui.dropdown |
Fires immediately when the show instance method is called. |
shown.coreui.dropdown |
Fired when the dropdown has been made visible to the user and CSS transitions have completed. |
hide.coreui.dropdown |
Fires immediately when the hide instance method has been called. |
hidden.coreui.dropdown |
Fired when the dropdown has finished being hidden from the user and CSS transitions have completed. |
const myTimePicker = document.getElementById('myTimePicker')
myTimePicker.addEventListener('timeChange.coreui.time-picker', (timeString, localeTimeString, date) => {
// do something...
})
Customizing
CSS variables
TimePickers use local CSS variables on .time-picker
for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
--#{$prefix}time-picker-body-padding: #{$time-picker-body-padding};
--#{$prefix}time-picker-roll-col-border: #{$time-picker-roll-col-border-width} solid #{$time-picker-roll-col-border-color};
SASS variables
$time-picker-default-icon-color: $gray-600;
$time-picker-default-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' role='img'><polygon fill='#{$time-picker-default-icon-color}' points='271.514 95.5 239.514 95.5 239.514 273.611 355.127 328.559 368.864 299.657 271.514 253.389 271.514 95.5' class='ci-primary'></polygon><path fill='#{$time-picker-default-icon-color}' d='M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16Zm0,448C141.125,464,48,370.875,48,256S141.125,48,256,48s208,93.125,208,208S370.875,464,256,464Z' class='ci-primary'></path></svg>");
$time-picker-invalid-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' role='img'><polygon fill='#{$form-feedback-invalid-color}' points='271.514 95.5 239.514 95.5 239.514 273.611 355.127 328.559 368.864 299.657 271.514 253.389 271.514 95.5' class='ci-primary'></polygon><path fill='#{$form-feedback-invalid-color}' d='M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16Zm0,448C141.125,464,48,370.875,48,256S141.125,48,256,48s208,93.125,208,208S370.875,464,256,464Z' class='ci-primary'></path></svg>");
$time-picker-valid-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' role='img'><polygon fill='#{$form-feedback-valid-color}' points='271.514 95.5 239.514 95.5 239.514 273.611 355.127 328.559 368.864 299.657 271.514 253.389 271.514 95.5' class='ci-primary'></polygon><path fill='#{$form-feedback-valid-color}' d='M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16Zm0,448C141.125,464,48,370.875,48,256S141.125,48,256,48s208,93.125,208,208S370.875,464,256,464Z' class='ci-primary'></path></svg>");
$time-picker-cleaner-icon-color: $gray-600;
$time-picker-cleaner-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' role='img'><polygon fill='#{$time-picker-cleaner-icon-color}' points='348.071 141.302 260.308 229.065 172.545 141.302 149.917 163.929 237.681 251.692 149.917 339.456 172.545 362.083 260.308 274.32 348.071 362.083 370.699 339.456 282.935 251.692 370.699 163.929 348.071 141.302' class='ci-primary'></polygon><path fill='#{$time-picker-cleaner-icon-color}' d='M425.706,86.294A240,240,0,0,0,86.294,425.706,240,240,0,0,0,425.706,86.294ZM256,464C141.309,464,48,370.691,48,256S141.309,48,256,48s208,93.309,208,208S370.691,464,256,464Z' class='ci-primary'></path></svg>");
$time-picker-cleaner-icon-hover-color: $body-color;
$time-picker-cleaner-icon-hover: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' role='img'><polygon fill='#{$time-picker-cleaner-icon-hover-color}' points='348.071 141.302 260.308 229.065 172.545 141.302 149.917 163.929 237.681 251.692 149.917 339.456 172.545 362.083 260.308 274.32 348.071 362.083 370.699 339.456 282.935 251.692 370.699 163.929 348.071 141.302' class='ci-primary'></polygon><path fill='#{$time-picker-cleaner-icon-hover-color}' d='M425.706,86.294A240,240,0,0,0,86.294,425.706,240,240,0,0,0,425.706,86.294ZM256,464C141.309,464,48,370.691,48,256S141.309,48,256,48s208,93.309,208,208S370.691,464,256,464Z' class='ci-primary'></path></svg>");
$time-picker-body-padding: $spacer * .5;
$time-picker-roll-col-border-width: 1px;
$time-picker-roll-col-border-color: var(--#{$prefix}border-color);