Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| import { useState, useRef, useEffect } from "react"; | |
| export const useTimer = () => { | |
| const [elapsedTime, setElapsedTime] = useState(0); | |
| const timerIntervalRef = useRef(null); | |
| const startTimeRef = useRef(null); | |
| const startTimer = () => { | |
| startTimeRef.current = Date.now(); | |
| timerIntervalRef.current = setInterval(() => { | |
| const timeElapsed = Math.floor( | |
| (Date.now() - startTimeRef.current) / 1000 | |
| ); | |
| setElapsedTime(timeElapsed); | |
| }, 1000); | |
| }; | |
| const stopTimer = () => { | |
| if (timerIntervalRef.current) { | |
| clearInterval(timerIntervalRef.current); | |
| } | |
| }; | |
| const formatElapsedTime = () => { | |
| const hours = Math.floor(elapsedTime / 3600); | |
| const minutes = Math.floor((elapsedTime % 3600) / 60); | |
| const seconds = elapsedTime % 60; | |
| return [ | |
| hours.toString().padStart(2, "0"), | |
| minutes.toString().padStart(2, "0"), | |
| seconds.toString().padStart(2, "0"), | |
| ].join(":"); | |
| }; | |
| useEffect(() => { | |
| startTimer(); | |
| return () => { | |
| stopTimer(); | |
| }; | |
| }, []); | |
| return { | |
| elapsedTime, | |
| formatElapsedTime, | |
| stopTimer, | |
| }; | |
| }; | |