Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于以mm:ss格式显示计时器的力矩js_Javascript_Reactjs_Timer_Momentjs - Fatal编程技术网

Javascript 用于以mm:ss格式显示计时器的力矩js

Javascript 用于以mm:ss格式显示计时器的力矩js,javascript,reactjs,timer,momentjs,Javascript,Reactjs,Timer,Momentjs,我有一个计时器,它必须以MM:SS格式显示。我的倒数时间是: 30分钟、60分钟和90分钟。在下面的实施中,30分钟和60分钟正确显示,但90分钟最初显示为30分钟,30分钟过后显示为60分钟。从状态开始的时间以秒为单位读取,因此选项为1800、3600和5400秒。以下是实施方案: const calculateSessionTimeAt = limit => Date.now() + (limit * 1000); where limit is the seconds this.sta

我有一个计时器,它必须以MM:SS格式显示。我的倒数时间是: 30分钟、60分钟和90分钟。在下面的实施中,30分钟和60分钟正确显示,但90分钟最初显示为30分钟,30分钟过后显示为60分钟。从状态开始的时间以秒为单位读取,因此选项为1800、3600和5400秒。以下是实施方案:

const calculateSessionTimeAt = limit => Date.now() + (limit * 1000); where limit is the seconds
this.state = { timer: this.props.calculateSessionTimeAt - Date.now() };

<span className="number">
          { formatTimerValue(timerValue, 'mm:ss') }
</span>

你能帮我解决我缺少的问题吗?

不确定为什么需要momentjs,如果你有计时器,你可以设置当前日期加计时器的值,并每秒检查当前日期和该值之间的差异

下面是一个如何做到这一点的示例:

const{useState,useffect}=React;
//将一位数设置为两位数,使0变为“00”
常数pad=n=>('0'+n).slice(-2);
//将毫秒数格式化为mm:ss
常数毫秒计时器=ms=>{
如果(ms<0){
返回“0:00”;
}
常数分钟=数学楼层(毫秒/60000);
常数秒=pad(
数学地板((毫秒-分钟*60000)/1000)
);
返回`${minutes}:${seconds}`;
};
函数App(){
const[end,setEnd]=useState();
const[minutes,setMinutes]=使用状态(6);
const[timer,setTimer]=useState();
常量开始=()=>
setEnd(Date.now()+分钟*60000+100);
useffect(()=>{
如果(!结束){
返回;
}
常数t=setInterval(
()=>setTimer(毫秒计时器(end-Date.now()),
1000
);
setTimer(毫秒计时器(end-Date.now());
返回()=>clearInterval(t);
}(完),;
返回(
会议记录:
setMinutes(e.target.value)}
/>{' '}
开始
{计时器}
);
}
ReactDOM.render(,document.getElementById('root'))


据我所知,momentjs不支持分钟数超出[0-59]范围的分钟数格式。抛开时间,手动计算分钟和秒数。@ChrisG有一个格式化程序,但我要说的是,只使用时间来获得两个日期的分钟和秒数的差异有点过火。
const formatTimerValue = (timer, format) => moment().startOf('hour').add(timer, 'milliseconds').format(format);