@@ -238,3 +238,66 @@ export function useTimer(settings) {
238238
239239 return { seconds, minutes, hours, days, start, pause, resume } ;
240240}
241+
242+
243+ /* ---------------------- useTime --------------------- */
244+
245+ export function useTime ( settings ) {
246+ const { format } = settings || { } ;
247+ const [ seconds , setSeconds ] = useState ( 0 ) ;
248+ const [ minutes , setMinutes ] = useState ( 0 ) ;
249+ const [ hours , setHours ] = useState ( 0 ) ;
250+ const [ ampm , setAmPm ] = useState ( '' ) ;
251+
252+ const intervalRef = useRef ( ) ;
253+ function start ( ) {
254+ if ( ! intervalRef . current ) {
255+ setCurrentTime ( ) ;
256+ intervalRef . current = setInterval ( ( ) => setCurrentTime ( ) , 1000 ) ;
257+ }
258+ }
259+
260+ function reset ( ) {
261+ if ( intervalRef . current ) {
262+ clearInterval ( intervalRef . current ) ;
263+ intervalRef . current = undefined ;
264+ }
265+ setSeconds ( 0 ) ;
266+ setMinutes ( 0 ) ;
267+ setHours ( 0 ) ;
268+ setAmPm ( '' ) ;
269+ }
270+
271+ function formatHours ( hours ) {
272+ if ( format === '12-hour' ) {
273+ const ampm = hours >= 12 ? 'pm' : 'am' ;
274+ var formattedHours = hours % 12 ;
275+ formattedHours = formattedHours || 12 ;
276+ return { hours : formattedHours , ampm } ;
277+ }
278+ return { hours, ampm : '' } ;
279+ }
280+
281+
282+ function setCurrentTime ( ) {
283+ var now = new Date ( ) ;
284+ const seconds = now . getSeconds ( ) ;
285+ const minutes = now . getMinutes ( ) ;
286+ const { hours, ampm } = formatHours ( now . getHours ( ) ) ;
287+
288+
289+ setSeconds ( seconds ) ;
290+ setMinutes ( minutes ) ;
291+ setHours ( hours ) ;
292+ setAmPm ( ampm ) ;
293+ }
294+
295+ // didMount effect
296+ useEffect ( ( ) => {
297+ start ( ) ;
298+ return reset ;
299+ } , [ ] ) ;
300+
301+
302+ return { seconds, minutes, hours, ampm } ;
303+ }
0 commit comments