在Javascript中使用以毫秒为单位的时间戳生成以天、小时、分钟、秒为单位的倒计时计时器



我收到一个以毫秒为单位的时间戳,这是事件启动的剩余时间。我需要使用这个时间戳来建立一个有天、小时、分钟和秒的倒计时计时器。我是一个反应和javascript的初学者。这是我尝试过的,但是,这个代码似乎没有正确地转换它。有人能帮我了解我哪里出了问题,以及如何解决这个问题吗?

const [timeRemaining, settimeRemaining] = useState(props.timeRemaining);
const [days, setdays] = useState(0);
const [hours, sethours] = useState(0);
const [mins, setmins] = useState(0);
const [secs, setsecs] = useState(0);
// countdown timer
useEffect(() => {
if (!timeRemaining) return;
const intervalId = setInterval(() => {
settimeRemaining(timeRemaining - 1);
setsecs(timeRemaining / 1000);
setmins(secs / 60);
sethours(mins / 60);
setdays(hours / 24);
}, 1000);
return () => clearInterval(intervalId);
}, [timeRemaining]);

您有两个问题:

  • 错误转换时间

  • 如果你通过道具是毫秒。您应该将保持计时子设置为1000(与时间间隔协调(。

    const [timeRemaining, settimeRemaining] = useState(props.timeRemaining);
    const [days, setdays] = useState(0);
    const [hours, sethours] = useState(0);
    const [mins, setmins] = useState(0);
    const [secs, setsecs] = useState(0);
    // countdown timer
    useEffect(() => {
    if (timeRemaining < 0) return;
    const intervalId = setInterval(() => {
    settimeRemaining(timeRemaining - 1000);
    
    setsecs(Math.floor((timeRemaining / 1000) % 60));
    setmins(Math.floor((timeRemaining / 1000 / 60) % 60));
    sethours(Math.floor((timeRemaining / 1000 / 60 / 60) % 24));
    setdays(Math.floor((timeRemaining / 1000 / 60 / 60 / 24)));
    }, 100);
    return () => clearInterval(intervalId);
    }, [timeRemaining]);
    

相关内容

最新更新