localeCode: en-US order: 33 category: Input title: TimePicker subTitle: TimePicker icon: doc-timepicker
import { TimePicker } from '@douyinfe/semi-ui';
Click TimePicker, and then you can select or enter a time in the floating layer.
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return <TimePicker />;
}
Starting from version V2.22.0, we changed the default mode of ScrollItem in TimePicker from wheel to normal. If you want to apply the effect of infinite scrolling back, please refer to the following example.
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return <TimePicker scrollItemProps={{ mode: "wheel", cycled: true }}/>;
}
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return <TimePicker insetLabel="Time" />;
}
When using value And not. defaultValue When used as a controlled component.value and onChange It needs to be used in conjunction.
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 <TimePicker value={this.state.value} onChange={this.onChange} />;
}
}
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
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return <TimePicker format={'HH:mm'} defaultValue={'10:24'} />;
}
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 (
<div>
<TimePicker
open={open}
onOpenChange={onOpenChange}
panelHeader={'Time Select'}
panelFooter={<Button onClick={closePanel}>close</Button>}
/>
<br/><br/>
<TimePicker
type='timeRange'
panelHeader={['start header', 'end header']}
panelFooter={[
<Button key="1" onClick={() => {console.log('start footer');}}>start footer</Button>,
<Button key="2" onClick={() => {console.log('end footer');}}>end footer</Button>
]}
/>
</div>
);
}
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return <TimePicker defaultValue={'12:08:23'} disabled />;
}
Available Hour Step, Minute Step, Second Step Show the optional minutes and seconds by step.
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return <TimePicker minuteStep={15} secondStep={10} />;
}
12-hour time selector, default format for h:mm:ss a, an incoming format The format must be in dateFns date formatWithin range.
For example, the default 12-hour format string is:
a h:mm:ss, if passed inA h:mm:ssThis will result in an inability to format correctly.
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return (
<div>
<TimePicker use12Hours />
<br />
<br />
<TimePicker use12Hours format="a h:mm" />
</div>
);
}
Version: > = 0.23.0
Pass type = "timeRange" to enable time range selection.
import React from 'react';
import { TimePicker } from '@douyinfe/semi-ui';
function Demo() {
return (
<div>
<TimePicker type="timeRange" defaultValue={['10:23:15', '12:38:32']} />
<br />
<br />
<TimePicker type="timeRange" use12Hours format="a h:mm" defaultValue={['AM 08:11', 'PM 11:21']} />
</div>
);
}
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.
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 ? (
<IconClose
onClick={e => {
e && e.stopPropagation();
setTime();
}}
/>
) : (
<IconChevronDown />
);
}, [time]);
return (
<TimePicker
value={time}
format={formatToken}
onChange={time => setTime(time)}
triggerRender={({ placeholder }) => (
<Button theme={'light'} icon={triggerIcon} iconPosition={'right'}>
{time ? dateFns.format(time, formatToken) : placeholder}
</Button>
)}
/>
);
}
Semi All configuration about time zone is converged in ConfigProvider
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 (
<ConfigProvider timeZone={timeZone}>
<div style={{ width: 300 }}>
<h5 style={{ margin: 10 }}>Select Time Zone:</h5>
<Select
placeholder={'Please Choose TimeZone'}
style={{ width: 300 }}
value={timeZone}
showClear={true}
onSelect={value => setTimeZone(value)}
>
{gmtList.map(gmt => (
<Select.Option key={gmt} value={gmt}>
{gmt}
</Select.Option>
))}
</Select>
<br />
<br />
<h5 style={{ margin: 10 }}>TimePicker:</h5>
<TimePicker
defaultValue={defaultTimestamp}
onChange={(date, dateString) => console.log('DatePicker changed: ', date, dateString)}
/>
</div>
</ConfigProvider>
);
}
| 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 | ||
| clearIcon | Can be used to customize the clear button, valid when showClear is true | ReactNode | 2.25.0 | |
| 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[] | ||
| dropdownMargin | Popup layer calculates the size of the safe area when the current direction overflows, used in scenes covered by fixed elements, more detail refer to issue#549, same as Tooltip margin | object|number | 2.25.0 | |
| 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|ReactNode[]|string | ||
| panelHeader | Panel head addon | ReactNode|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" |
|
| prefix | 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 | object | 0.31.0 | |
| secondStep | Second option interval | number | 1 | |
| showClear | Whether to show the clear button | boolean | true | 0.35.0 |
| 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 |
Some internal methods provided by TimePicker can be accessed through ref:
| Name | Description |
|---|---|
| blur() | Remove focus |
| focus() | Get the focus |
When 12-hour clock is selected, it needs to be used together with AM/PM