import React, { useState } from 'react'; import useEffectOnce from 'react-use/lib/useEffectOnce'; import { InputNumber } from 'antd'; import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import relativeTime from 'dayjs/plugin/relativeTime'; dayjs.extend(duration); dayjs.extend(relativeTime); const TimeSelect: React.FC< { value?: number; onChange?: (value: number) => void; } & { style?: React.CSSProperties; className?: string; } > = ({ value, onChange, ...restProps }) => { const [hour, setHour] = useState(0); const [minute, setMinute] = useState(0); const [second, setSecond] = useState(0); useEffectOnce(() => { if (value !== undefined) { const duration = dayjs.duration(value); const hours = Math.floor(duration.asHours()); const mins = Math.floor(duration.asMinutes()) - hours * 60; const sec = Math.floor(duration.asSeconds()) - mins * 60 - hours * 60 * 60; setHour(hours); setMinute(mins); setSecond(sec); } }); const updateTimeMilliseconds = ( hourParam: number, minuteParam: number, secondParam: number, ) => { const timeMilliseconds = dayjs .duration([hourParam, minuteParam, secondParam].join(':')) .asMilliseconds(); if (onChange) { onChange(timeMilliseconds); } }; return ( { setHour(value); updateTimeMilliseconds(value, minute, second); }} /> : { setMinute(value); updateTimeMilliseconds(hour, value, second); }} /> : { setSecond(value); updateTimeMilliseconds(hour, minute, value); }} /> ); }; export default TimeSelect;