---
localeCode: en-US
order: 32
category: Input
title: TimePicker
subTitle: TimePicker
icon: doc-timepicker
brief: Users can easily select a compliant, formatted point of time using the time selector.
---
## Demos
### How to import
```jsx import
import { TimePicker } from '@douyinfe/semi-ui';
```
### Basic Usage
Click TimePicker, and then you can select or enter a time in the floating layer.
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return ;
}
```
### With an Embedded Label
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return ;
}
```
### Controlled Component
When using `value` And not. `defaultValue` When used as a controlled component.`value` and `onChange` It needs to be used in conjunction.
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
class Demo extends React.Component {
constructor() {
super();
this.state = {
value: null,
};
this.onChange = this.onChange.bind(this);
}
onChange(time) {
console.log(time);
this.setState({ value: time });
}
render() {
return ;
}
}
```
### Different Format
The columns in the TimePicker float will follow `format` Change, when omitted `format` At some point, the corresponding column in the floating layer will also disappear.
NOTE: `format` Follow the date-fns `format` Format. https://date-fns.org/v2.0.0/docs/format
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return ;
}
```
### Set Panel Header and Footer
```jsx live=true
import React, { useState } from 'react';
import { TimePicker, Button } from '@douyinfe/semi-ui';
function Demo() {
const [open, setOpen] = useState(false);
const closePanel = () => setOpen(false);
const onOpenChange = open => {
setOpen(open);
console.log(open);
};
return (
close}
/>
);
}
```
### Disable Time Selection
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return ;
}
```
### Set Step Length
Available `Hour Step`, `Minute Step`, `Second Step` Show the optional minutes and seconds by step.
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return ;
}
```
### 12-hour System
12-hour time selector, default `format` for `h:mm:ss a`, an incoming `format` The format must be in [dateFns date format](https://date-fns.org/v2.0.0/docs/format)Within range.
> For example, the default 12-hour format string is:`a h:mm:ss`, if passed in `A h:mm:ss` This will result in an inability to format correctly.
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return (
);
}
```
### Time Range
**Version:** > = 0.23.0
Pass type = "timeRange" to enable time range selection.
```jsx live=true
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return (
);
}
```
### Custom Trigger
**Version:** >=0.34.0
By default we use the `Input` component as the trigger for the `DatePicker` component. You can customize this trigger by passing the `triggerRender` method.
```jsx live=true hideInDSM
import React, { useState, useMemo } from 'react';
import * as dateFns from 'date-fns';
import { TimePicker, Button } from '@douyinfe/semi-ui';
import { IconChevronDown, IconClose } from '@douyinfe/semi-icons';
function Demo() {
const formatToken = 'HH:mm:ss';
const [time, setTime] = useState(new Date());
const triggerIcon = useMemo(() => {
return time ? (
{
e && e.stopPropagation();
setTime();
}}
/>
) : (
);
}, [time]);
return (
setTime(time)}
triggerRender={({ placeholder }) => (
)}
/>
);
}
```
## TimeZone Config
Semi All configuration about time zone is converged in [ConfigProvider](/en-US/other/configprovider)
```jsx live=true hideInDSM
import React, { useMemo, useState } from 'react';
import { ConfigProvider, Select, TimePicker } from '@douyinfe/semi-ui';
function Demo(props = {}) {
const [timeZone, setTimeZone] = useState('GMT+08:00');
const defaultTimestamp = 1581599305265;
const gmtList = useMemo(() => {
const list = [];
for (let hourOffset = -11; hourOffset <= 14; hourOffset++) {
const prefix = hourOffset >= 0 ? '+' : '-';
const hOffset = Math.abs(parseInt(hourOffset, 10));
list.push(`GMT${prefix}${String(hOffset).padStart(2, '0')}:00`);
}
return list;
}, []);
return (
);
}
```
## API Reference
| Parameters | Instructions | Type | Default | Version |
| --- | --- | --- | --- | --- |
| autoAdjustOverflow | Whether the floating layer automatically adjusts its direction when it is blocked | boolean | true | **0.34.0** |
| autoFocus | Automatic access to focus | boolean | false |
| className | Outer style name | string | |
| clearText | Clear button prompt copy | string | Clear |
| defaultOpen | Whether the panel is open by default | boolean | | **0.19.0** |
| defaultValue | Default time | Date\|timeStamp\|string (array when type = "timeRange") | |
| disabled | Disable all operations | boolean | false |
| disabledHours | Prohibited selection of partial hour options | () => number [] | |
| disabledMinutes | Prohibited to select some minute options | (selectedHour: number) => number[] | |
| disabledSeconds | Unable to select partial second option | (selectedHour: number, selectedMinute: number) => number[] | |
| focusOnOpen | Whether to open the panel and focus the input box when mounting | boolean | false | |
| format | Time format of presentation | string | "HH: mm: ss." | |
| getPopupContainer | Specifies the container and the floating layer will be rendered into the element, you need to set 'position: relative` | () => HTMLElement | () => document.body |
| hideDisabledOptions | Hide the option of forbidden selection | boolean | false |
| hourStep | Hour option interval | number | 1 |
| inputReadOnly | Set the input box to read-only (avoid opening a virtual keyboard on a mobile device) | boolean | false |
| insetLabel | Prefix label, lower priority than `prefix` | string\|ReactNode | | |
| minuteStep | Minute option interval | number | 1 |
| motion | Whether to display the pop-up layer animation | boolean | true | |
| open | Controlled property of whether the panel is open | boolean | |
| panelFooter | Addon at the bottom of the panel | ReactNode\|string | |
| panelHeader | Panel head addon | ReactNode\|string | |
| placeholder | What's displayed when it's not worth it. | string | "Select time" |
| popupClassName | Pop-up class name | string | '' |
| popupStyle | Pop-up layer style object | object | - |
| position | Floating position | string | type="timeRange" => "bottom" type="time" => "bottomLeft" |
| prefixCls | Prefix content | string\|ReactNode | | |
| preventScroll | Indicates whether the browser should scroll the document to display the newly focused element, acting on the focus method inside the component, excluding the component passed in by the user | boolean | | |
| rangeSeparator | time range delimiter | string | "~" |
| scrollItemProps | The props passed through to ScrollItem. The optional values are the same as [ScrollList#API](/zh-CN/show/scrolllist#ScrollItem) | object | | **0.31.0** |
| secondStep | Second option interval | number | 1 |
| showClear | Do you show the clear button? **v>=0.35.0** | boolean | true |
| size | Size of input box, one of 'default', 'small' and 'large' | string | 'default' | |
| triggerRender | Custom trigger rendering method | ({ placeholder: string }) => ReactNode | | **0.34.0** |
| type | type | "time"\|"timeRange" | "time" |
| use12Hours | Using a 12-hour system, `format` default to `h: mm: ssa` when true | boolean | false |
| value | Current time | Date\|timeStamp\|string (array when type = "timeRange") | |
| onBlur | Callback when focus is lost | (e: domEvent) => void | () => {} | **1.0.0** |
| onChange | A callback in time. | (time: Date\|Date[], timeString: string\|string[]) => void | |
| onChangeWithDateFirst | Set the order of parameter in `onChange`, `true`: (Date, string); `false`: (string, Date) | boolean | true | **2.4.0** |
| onFocus | Callback when focus is obtained | (e: domEvent) => void | () => {} | **1.0.0** |
| onOpenChange | A callback when the panel is on / off | (isOpen: boolean) => void | |
## Method
| Name | Description |
| ------- | ------------- |
| blur() | Remove focus |
| focus() | Get the focus |
## Content Guidelines
- The time selector includes at least hours and minutes, such as: 11:30, which can be adapted to 12-hour or 24-hour format during localization
- When 12-hour clock is selected, it needs to be used together with AM/PM
## Design Tokens