This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
website/src/libs/hooks/useCountdown.ts

40 lines
1.1 KiB
TypeScript

import { useEffect, useState } from 'react';
export type DifferenceBetweenDates = {
days: number;
hours: number;
minutes: number;
seconds: number;
};
export const calculateDifferenceBetweenTwoDates = (
dateLeft: Date,
dateRight: Date
): DifferenceBetweenDates => {
const difference = dateRight.getTime() - dateLeft.getTime();
return {
days: difference > 0 ? Math.floor(difference / (1000 * 60 * 60 * 24)) : 0,
hours:
difference > 0 ? Math.floor((difference / (1000 * 60 * 60)) % 24) : 0,
minutes: difference > 0 ? Math.floor((difference / 1000 / 60) % 60) : 0,
seconds: difference > 0 ? Math.floor((difference / 1000) % 60) : 0,
};
};
export const useCountdown = (dateRight: Date): DifferenceBetweenDates => {
const [difference, setDifference] = useState<DifferenceBetweenDates>(
calculateDifferenceBetweenTwoDates(new Date(), dateRight)
);
useEffect(() => {
const timeout = setTimeout(() => {
setDifference(calculateDifferenceBetweenTwoDates(new Date(), dateRight));
}, 1000);
return () => {
clearTimeout(timeout);
};
}, [dateRight]);
return difference;
};