UNPKG

use-react-countdown

Version:

A simple hook, that will return days, hours, minutes and seconds (changing), accepting a date as an input

53 lines (45 loc) 1.39 kB
import { useEffect, useRef, useState } from "react"; export const useReactCountdown = (date) => { //COUNTDOWN const [timerDays, setTimerDays] = useState("00"); const [timerHours, setTimerHours] = useState("00"); const [timerMinutes, setTimerMinutes] = useState("00"); const [timerSeconds, setTimerSeconds] = useState("00"); let interval = useRef(); const startTimer = () => { const countdownDate = new Date(date).getTime(); interval = setInterval(() => { const now = new Date().getTime(); const distance = countdownDate - now; const days = Math.floor(distance / (1000 * 60 * 60 * 24)); const hours = Math.floor( (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) ); const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((distance % (1000 * 60)) / 1000); if (distance < 0) { // Stop clearInterval(interval.current); } else { // Update setTimerDays(days); setTimerHours(hours); setTimerMinutes(minutes); setTimerSeconds(seconds); } }, 1000); }; useEffect(() => { startTimer(); return () => { clearInterval(interval.current); }; }); // Logic return { days: timerDays, hours: timerHours, minutes: timerMinutes, seconds: timerSeconds, }; };