1. import useConutDonw from './useCountDown';
    2. function App() {
    3. const countDown = useCountDown(1648836799000);
    4. const [[monthes, days, hours, minutes, seconds], setCountDown] = React.useState([0, 0, 0, 0, 0])l
    5. React.useEffect(() => {
    6. setCountDown(countDown);
    7. }, [countDown])
    8. return (
    9. <div>
    10. {
    11. `${monthes}个月${days}天 ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
    12. }
    13. </div>
    14. )
    15. }
    1. function useCountDown (timeStamp) {
    2. const [countDown, setCountDown] = React.useState([0, 0, 0, 0, 0]);
    3. let t = null;
    4. function doCountDown () {
    5. const nowTimeStamp = new Date().getTime(),
    6. diffTimeStamp = timeStamp - nowTimeStamp,
    7. diffDate = new Date(diffTimeStamp),
    8. diffMonths = diffDate.getMonth(),
    9. diffDays = diffDate.getDate(),
    10. diffHours = diffDate.getHours(),
    11. diffMinutes = diffDate.getMinutes(),
    12. diffSeconds = diffDate.getSeconds();
    13. setCountDown([
    14. diffMonths,
    15. diffDays,
    16. diffHours,
    17. diffMinutes,
    18. diffSeconds,
    19. ]);
    20. if (diffMonths === 0 && diffDays === 0 && diffHours === 0 && diffMinutes === 0 && diffSeconds === 0) {
    21. clearInterval(t);
    22. t = null;
    23. return;
    24. }
    25. React.useEffect({} => {
    26. t = setInterval(doCountDown, 1000);
    27. }, []);
    28. return countDown;
    29. }
    30. }
    31. export default useCountDown;