Javascript 在我的倒计时钟上用NaN代替数字?
我正在创建一个倒计时时钟,它对提供的日期之前的天、小时、分钟和秒进行倒计时。我有倒计时功能,但只有在我的Javascript 在我的倒计时钟上用NaN代替数字?,javascript,reactjs,Javascript,Reactjs,我正在创建一个倒计时时钟,它对提供的日期之前的天、小时、分钟和秒进行倒计时。我有倒计时功能,但只有在我的getTimeNow()函数中手动输入日期时才可以。当我给函数一个参数“deadline”,然后在“time”变量中使用该参数时,它返回为NaN。我知道我遗漏了什么,但我不知道是什么 我尝试重新格式化函数以获得正确的日期格式,但无法通过输入字段更新原始日期 注意:这个应用程序还没有完成,我还有一些重构工作要做,但现在它仍然可以正常工作 Clock.jsx import React, { Co
getTimeNow()
函数中手动输入日期时才可以。当我给函数一个参数“deadline”,然后在“time”变量中使用该参数时,它返回为NaN。我知道我遗漏了什么,但我不知道是什么
我尝试重新格式化函数以获得正确的日期格式,但无法通过输入字段更新原始日期
注意:这个应用程序还没有完成,我还有一些重构工作要做,但现在它仍然可以正常工作
Clock.jsx
import React, { Component } from 'react';
import './Countdown.css';
class Clock extends Component {
constructor(props) {
super(props);
this.state = {
days: 0,
hours: 0,
minutes: 0,
seconds: 0
}
}
componentWillMount() {
this.getTimeNow(this.props.deadline);
}
componentDidMount() {
setInterval(() => this.getTimeNow(this.props.deadline), 1000);
}
getTimeNow(deadline) {
const time = Date.parse(deadline) - new Date();
const seconds = Math.floor((time/1000)%60);
const minutes = Math.floor((time/1000/60)%60);
const hours = Math.floor(time/(1000 * 60 * 60) % 24);
const days = Math.floor(time/(1000 * 60 * 60 * 24));
this.setState({days,hours, minutes, seconds});
}
render() {
return (
<div>
<div className="days">{this.state.days}: days</div>
<div className="hours">{this.state.hours}: hours</div>
<div className="minutes">{this.state.minutes}: minutes</div>
<div className="seconds">{this.state.seconds}: seconds</div>
</div>
)
}
}
export default Clock;
从“React”导入React,{Component};
导入“./Countdown.css”;
类时钟扩展组件{
建造师(道具){
超级(道具);
此.state={
天数:0,
小时:0,
分钟:0,
秒:0
}
}
组件willmount(){
this.getTimeNow(this.props.deadline);
}
componentDidMount(){
setInterval(()=>this.getTimeNow(this.props.deadline),1000;
}
getTimeNow(截止日期){
const time=Date.parse(截止日期)-新日期();
常数秒=数学地板((时间/1000)%60);
常数分钟=数学楼层((时间/1000/60)%60);
常数小时=数学楼层(时间/(1000*60*60)%24);
施工天数=数学楼层(时间/(1000*60*60*24));
this.setState({天,小时,分钟,秒});
}
render(){
返回(
{this.state.days}:天
{this.state.hours}:小时
{this.state.minutes}:分钟
{this.state.seconds}:秒
)
}
}
输出默认时钟;
倒计时.jsx
import React, { Component } from 'react';
import Clock from './Clock';
import './Countdown.css';
class Countdown extends Component {
constructor(props) {
super(props);
this.state = {
deadline: 'November 16, 2020',
newDeadline: ''
}
}
changeDeadline() {
this.setState({deadline: this.state.newDeadline});
}
render() {
return (
<div className="Countdown">
<div className="title">
Countdown to {this.state.deadline}
</div>
<Clock />
<div className="input">
<input
placeholder='new date'
onChange={event => this.setState({newDeadline: event.target.value})}
/>
<button onClick={() => this.changeDeadline()}>Submit</button>
</div>
</div>
)
}
}
export default Countdown;
import React,{Component}来自'React';
从“./Clock”导入时钟;
导入“./Countdown.css”;
类倒计时扩展组件{
建造师(道具){
超级(道具);
此.state={
截止日期:“2020年11月16日”,
新截止日期:“”
}
}
更改截止日期(){
this.setState({deadline:this.state.newDeadline});
}
render(){
返回(
{本州.截止日期}倒计时
this.setState({newDeadline:event.target.value})
/>
this.changeDeadline()}>提交
)
}
}
出口默认倒计时;
我希望输出是从天到秒的倒计时,但我每次都得到NaN。我还希望,当用户输入新日期时,倒计时会发生相应的变化。因为您没有提供完整的代码示例,如何使用组件时钟组件,回答可能会很棘手。但最有可能的是,你们把错误的事情作为最后期限。若您查看MDN,将采用日期的字符串表示形式,并以毫秒为单位返回数字。但是,如果无法识别字符串,它将返回NaN
尝试将类似“2020年3月21日”的内容传递给date prop,它应该会起作用。我们可以看到您正在解析的日期字符串是什么吗。问题可能就在这里。关于在
组件willmount()中调用this.getTimeNow()
的具体原因是什么?另外,找一个很棒的datetime库。这就是我被指示要做的。这是不对的吗?但最有可能的是,你们把错误的东西作为最后期限。是的,你是对的,但是当我这样做时,当你在输入字段中更改日期时,它不会更新倒计时。这就是我被难住的地方。