import React, { useMemo, useState } from 'react'; import { ConfigProvider, Select, DatePicker, TimePicker } from '@douyinfe/semi-ui'; import { IANAOffsetMap, zonedTimeToUtc, utcToZonedTime, format as tzFormat } from '@douyinfe/semi-foundation/utils/date-fns-extra'; import { parse, format, addDays, addWeeks, startOfMonth, endOfMonth, addMonths } from 'date-fns'; import zh_CN from '@douyinfe/semi-ui/locale/source/zh_CN'; import en_GB from '@douyinfe/semi-ui/locale/source/en_GB'; import ko_KR from '@douyinfe/semi-ui/locale/source/ko_KR'; import ja_JP from '@douyinfe/semi-ui/locale/source/ja_JP'; const { Option } = Select; const presets = [ { text: 'Today', start: new Date(), end: new Date(), }, { text: 'Tomorrow', start: addDays(new Date(), 1), end: addDays(new Date(), 1), }, { text: 'Next Week', start: addWeeks(new Date(), 1), end: addWeeks(new Date(), 2), }, { text: 'Next Month', start: startOfMonth(addMonths(new Date(), 1)), end: endOfMonth(addMonths(new Date(), 1)), }, { text: 'Today', start: new Date(), end: new Date(), }, { text: 'Tomorrow', start: addDays(new Date(), 1), end: addDays(new Date(), 1), }, { text: 'Next Week', start: addWeeks(new Date(), 1), end: addWeeks(new Date(), 2), }, { text: 'Next Month', start: startOfMonth(addMonths(new Date(), 1)), end: endOfMonth(addMonths(new Date(), 1)), }, ]; const Demo = () => { const [timeZone, setTimeZone] = useState('GMT-08:00'); const [localeCode, setLocaleCode] = useState(zh_CN.code); const defaultTimestamp = 1581599305265; const defaultTimestampEnd = defaultTimestamp + 3600 * 24 * 2 + 1600 * 2; const formatToken = 'yyyy-MM-dd HH:mm:ss'; const defaultDate = parse(`2020-02-13 21:08:25`, formatToken, Date.now()); const gmtList = useMemo( () => IANAOffsetMap.map(([hourOffset, [iana]]) => { const hOffset = Math.abs(parseInt(hourOffset, 10)); const mOffset = Math.abs(Math.abs(hourOffset) - hOffset); const prefix = hourOffset >= 0 ? '+' : '-'; return `GMT${prefix}${String(hOffset).padStart(2, '0')}:${String(mOffset * 60).padStart(2, '0')}`; }), [] ); const localeList = useMemo(() => [zh_CN, en_GB, ko_KR, ja_JP], []); const [timeDate, setTimeDate] = useState(new Date(defaultTimestamp)); const [date, setDate] = useState(new Date(defaultTimestamp)); const Item = useMemo(() => (props = {}) =>
, []); return ( locale.code === localeCode)}>
Same UTC Time
    {gmtList.map(gmt => (
  • {gmt} {tzFormat(defaultTimestamp, formatToken, { timeZone: gmt })}
  • ))}
Same Time String
    {gmtList.map(gmt => (
  • {gmt} {tzFormat(zonedTimeToUtc(format(defaultTimestamp, formatToken), gmt), formatToken)}
  • ))}

Uncontrolled DatePicker

console.log('DatePicker changed: ', date, dateString)} />

Controlled DatePicker

{ console.log('DatePicker changed: ', date, dateString); setDate(date); }} />

With Confirm and Persets

({ text: preset.text, start: preset.start, }))} onChange={(...args) => console.log(...args)} />

Uncontrolled TimePicker

console.log('TimePicker changed: ', time, timeString)} />

Controlled TimePicker

{ console.log('TimePicker changed: ', time, timeString); // setTimeDate(time); setTimeDate(timeString); }} />
); }; export default Demo;