input-dt is a library for datetime input. You can use it without JavaScript. Easy to use with PHP.
- A custom element
- Framework independent
- Automatically localized
- Dark mode support
- Date periods support
- Customizable


Import js and css files beforehand. This is an example of importing from a CDN.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/input-dt-min.css">
<script type="module" src="https://cdn.jsdelivr.net/npm/[email protected]/input-dt-min.js"></script>
To start, write an input[type="text"]
tag and enclose it in an input-dt
tag. You can optionally add attributes to the input-dt
tag.
Next, add the input-dt
attribute to the input[type="text"]
.
The picker is added as the last element of the input-dt
.
<label for="calender">Datetime:</label>
<input-dt
value="2024-03-10"
min="2024-01-01"
max="2026-12-31"
disable="2024-08-31,2024-12-31"
hours="0,3,6,9,12,15,18,21"
minutes="0,10,20,30,40,50"
seconds="0,10,20,30,40,50"
unit="seconds"
locales="ja"
first-day="0"
background="true"
auto-close="true"
>
<input type="text" name="calender" input-dt>
</input-dt>
See the examples directory for examples in HTML only, Bootstrap, Vue.js, React, Jito, and PHP.
npm i input-dt
Import js and css at entry point.
import 'input-dt'
import 'input-dt/input-dt.css'
Attribute | Description |
---|---|
input-dt |
This attribute can be attached to input[type="text"] or input[type="datetime-local"] , which opens the picker when the focus is set. It will also fire an input event whenever any datetime is selected. Optionally supports formatting. The supported formats are described below. |
input-dt-open |
If this attribute is specified, the picker will be opened when the element is clicked. |
input-dt-clear |
If this attribute is specified, clicking on the element will clear the date/time value. |
input-dt-display |
If this attribute is specified, each time a datetime is selected, the element's children are overwritten with text nodes representing the datetime. Optionally supports formatting. The supported formats are described below. |
input-dt-value |
When associated with an element, it updates the value of the element when a date/time is selected. Optionally supports formatting. The supported formats are described below. |
The input-dt
element provides several attributes. These are default values and also detect dynamic changes.
Attribute | Description |
---|---|
value |
Value selected by input-dt. |
min |
Minimum number of selectable dates. By default, New Year's Day 120 years ago. A comma-separated list of dates in the format YYYY-MM-DD and a selector string identifying other dt-picker elements. If multiple dates are given, the most recent date is used. |
max |
Maximum selectable dates. By default, the last day of the year after 10 years. A comma-separated list of dates in the format YYYY-MM-DD and a selector string identifying other dt-picker elements. If multiple dates are given, the earliest date is used. |
disable |
List of dates that cannot be selected. A comma-separated list of dates in the format YYYY-MM-DD and a selector string identifying other dt-picker elements. |
hours |
Options for the hour. |
minutes |
Options for the minute. |
seconds |
Options for the second. |
unit |
Minimum unit of datetime. day - date picker only, or hour , minute , second (default). |
locales |
A locale identifier used for all parts of the modal. By default, it will be the default locale of the web browser. |
first-day |
First day of the week. An integer, between 0 and 6. By default, this is the default locale of the web browser. However, FireFox is not supported, so the value is 0. |
background |
Normally, a modal is closed by clicking somewhere other than the modal. This is done by receiving the click event of the document . Therefore, if there is an element that stops the propagation of events, the modal will not close.If the background attribute is set to true , a filter that closes the modal on click will cover the entire screen. |
autoclose |
If set to true, the modal will only close when a date is selected in the date picker only. |
input-dt, input-dt-display and input-dt-value support formatting as attribute values. See the following table. If you do not specify a format, it defaults to the localized format.
Format | Output | Note |
---|---|---|
yy | 26 | The 2-digit year |
yyyy | 2026 | The 4-digit year |
YYYY | 2026 | The full year |
M | 1 to 12 | The numeric month |
MM | 01 to 12 | The 2-digit month |
D | 1 to 31 | The numeric day of month |
DD | 01 to 31 | The 2-digit day of month |
H | 0 to 23 | The numeric hour |
HH | 00 to 23 | The 2-digit hour |
m | 0 to 59 | The numeric minute |
mm | 00 to 59 | The 2-digit minute |
s | 0 to 59 | The numeric second |
ss | 00 to 59 | The 2-digit second |
You can easily change the style.
You can customise colours using CSS custom properties.
.input-dt {
--input-dt-color: #FFF;
--input-dt-background: #323232;
--input-dt-highlight: rgb(136, 214, 83);
--input-dt-disable: #777;
--input-dt-outside: #BBB;
--input-dt-outside-visibility: visible;
--input-dt-font-family: serif;
}

You can use the developer tool or other tools to find out the used class name and override it.

When the input-dt element is accessed via JavaScript, several properties are available.
Property | Type | Description |
---|---|---|
value |
Date | null | Value selected by input-dt. |
min |
Date | null | Minimum selectable dates. By default, New Year's Day 120 years ago. If a null value is assigned, it is initialized to the default value. |
max |
Date | null | Maximum selectable dates. By default, the last day of the year after 10 years. If a null value is assigned, it is initialized to the default value. |
disable |
Date[] | List of dates that cannot be selected. |
hours |
number[] | null | Options for the hour. |
minutes |
number[] | null | Options for the minute. |
seconds |
number[] | null | Options for the second. |
unit |
string | Minimum unit of datetime. day - date picker only, or hour , minute , second (default). |
locales |
string | null | A locale identifier used for all parts of the modal. By default, it will be the default locale of the web browser. |
firstDay |
number | null | First day of week. By default, it will be the default locale of the web browser. |
background |
boolean | See the background attribute. |
autoclose |
boolean | See the autoclose attribute. |
modal |
Element | Read-only. A property for direct access to the elements of a modal. |
format |
(date: Date) => string | Write-only. It is possible to change the display of input-dt or input-dt-display . If used, the format attribute becomes invalid. |
formatYear |
(date: number) => string | Write-only. It is possible to change the text portion displaying the year and the year options. |
formatMonth |
(date: number) => string | Write-only. It is possible to change the text portion displaying the month and the month options. |
formatWeek |
(value: number) => string | Write-only. The display text of week headings in the calendar can be changed. |
formatDay |
(date: Date) => string | Write-only. The text of each day of the calendar can be changed. |
formatHour |
(value: number) => string | Write-only. The text of the hour options can be changed. |
formatMinute |
(value: number) => string | Write-only. The text of the minute options can be changed. |
formatSecond |
(value: number) => string | Write-only. The text of the second options can be changed. |
renderYear |
(value: number, flags: Flags) => Element | Write-only. The entire element of the year option can be replaced. |
renderMonth |
(value: number, flags: Flags) => Element | Write-only. The entire element of the month option can be replaced. |
renderWeek |
(value: number) => Element | Write-only. It is possible to change the elements of the calendar week headings in their entirety. |
renderDate |
(date: Date, flags: Flags) => Element | Write-only. It is possible to change the elements of each day of the calendar in its entirety. |
renderHour |
(value: number, flags: Flags) => Element | Write-only. The entire element of the hour option can be replaced. |
renderMinute |
(value: number, flags: Flags) => Element | Write-only. The entire element of the minute option can be replaced. |
renderSecond |
(value: number, flags: Flags) => Element | Write-only. The entire element of the second option can be replaced. |
The Flags type has the following properties
isSelected
- This value is the currently selected.isWeekend
- renderDate only. It is the weekend as determined by the current locale.isInside
- renderDate only. This date is inside the currently selected years and months.isOutside
- renderDate only. This date is outside the currently selected years and months.isDisabled
- renderDate only. This date has been disabled.
These properties can be used to create a new custom element as follows.
import { InputDt } from 'input-dt'
export class InputDtJa extends InputDt {
constructor() {
super()
this.locales = 'ja'
}
}
window.customElements.define('input-dt-ja', InputDtJa)
The input-dt
element receives an input
event each time a date/time is selected.
At the same time, input-dt also sends an input
event to input elements with input-dt
.