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
JavaScript
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,
};
};