Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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 如何正确创建函数的日期对象_Javascript_Reactjs_Date_Datepicker - Fatal编程技术网

Javascript 如何正确创建函数的日期对象

Javascript 如何正确创建函数的日期对象,javascript,reactjs,date,datepicker,Javascript,Reactjs,Date,Datepicker,我的表单上有一个字段的日期选择器,允许用户选择日期。提交表单时,日期对象被解析为后端API所需的正确格式的字符串。当我尝试获取一个对象来填充表单时,该输入字段的返回类型返回为字符串。如果我尝试传入字符串,页面将崩溃 当API返回一个字符串变量,该变量应该填充如下所示的输入字段时,就会出现确切的问题。程序当前抛出一个错误,说明date.clone不是函数 有人能帮我弄清楚如何从后端传递字符串日期,使其正确显示在前端吗 这是接收日期对象并为后端创建字符串的函数。后端以字符串形式返回lastDateA

我的表单上有一个字段的日期选择器,允许用户选择日期。提交表单时,日期对象被解析为后端API所需的正确格式的字符串。当我尝试获取一个对象来填充表单时,该输入字段的返回类型返回为字符串。如果我尝试传入字符串,页面将崩溃

当API返回一个字符串变量,该变量应该填充如下所示的输入字段时,就会出现确切的问题。程序当前抛出一个错误,说明date.clone不是函数

有人能帮我弄清楚如何从后端传递字符串日期,使其正确显示在前端吗

这是接收日期对象并为后端创建字符串的函数。后端以字符串形式返回lastDateAccessed,lastDateAccessedHolder在输入字段中可见

handleDateChange(date) {
    this.setState({ lastDateAccessedHolder: date });

    var lastDate = new Date(date);
    var day = lastDate.getDate();
    if(day.toString().length === 1)
    {
        day = '0' + day;
    }

    var month = lastDate.getMonth() + 1;
    if(month.toString().length === 1)
    {
        month = '0' + month;
    }

    var year = lastDate.getFullYear();
    this.setState(
        {lastDateAccessed: year+"-"+month+"-"+day},
        () => console.log(this.state.lastDateAccessed)
    );
}
这是使用日期选择器的行,输入字段如下所示:

<DatePicker selected={this.state.lastDateAccessedHolder} onChange={this.handleDateChange}/>
错误:

index.js:318 Uncaught TypeError: date.clone is not a function
at safeDateFormat (index.js:318)
at DatePicker._this.renderDateInput (index.js:2844)
at DatePicker.render (index.js:2916)
at finishClassComponent (react-dom.development.js:8389)
at updateClassComponent (react-dom.development.js:8357)
at beginWork (react-dom.development.js:8982)
at performUnitOfWork (react-dom.development.js:11814)
at workLoop (react-dom.development.js:11843)
at HTMLUnknownElement.callCallback (react-dom.development.js:100)
at Object.invokeGuardedCallbackDev (react-dom.development.js:138)
at invokeGuardedCallback (react-dom.development.js:187)
at replayUnitOfWork (react-dom.development.js:11318)
at renderRoot (react-dom.development.js:11885)
at performWorkOnRoot (react-dom.development.js:12449)
at performWork (react-dom.development.js:12370)
at performSyncWork (react-dom.development.js:12347)
at requestWork (react-dom.development.js:12247)
at scheduleWorkImpl (react-dom.development.js:12122)
at scheduleWork (react-dom.development.js:12082)
at Object.enqueueSetState (react-dom.development.js:6644)
at addAsset../node_modules/react/cjs/react.development.js.Component.setState (react.development.js:238)
at addAsset.js:71

这个答案假设您只需要日期

确保GET请求返回的字符串遵循ISO格式:
YYYY-MM-DD

有关更多详细信息,请参考以下答案-和

更新:在进一步挖掘之后,我发现了一个建议,即按照其中一条评论中的建议,利用时间来安排日期

<DatePicker
  className={styles.datePicker}
  selected={moment(this.props.endDate)}
  onChange={this.handleChangeEnd}
/>


“页面将崩溃”-是否存在相关错误?如果我尝试将lastDateAccessedHolder设置为responseData.lastDateAccessed,我将获得date.clone不是一个函数您需要显示后端返回的实际值,即lastDateAccessed的值,否则任何答案都只是猜测。您不应该使用内置的解析器,请参阅没有字符串值可以传递给日期构造函数,该构造函数将返回除日期对象以外的任何内容。时间值可能为NaN,表示无效的日期,但对象本身将是有效的。@RobG我更新了问题。谢谢你看
new Date('2018-09-09')
将返回2018-09-09T00:00:00Z的日期对象在合理的现代实现中,不会产生错误,因此您的问题在别处。我尝试将返回字符串转换为该格式并将其传递为新日期,然后使用新的date对象,不幸的是,它返回了相同的错误。我用另一个链接更新了答案。如果对你有效,请告诉我。如果没有,请写下返回的字符串。不幸的是,这也不起作用。我复制了错误,但它太长,无法粘贴到评论中。它仍然在说date.clone不是一个函数,我不知道它想要我传递什么@不客气!更新问题,解释发生了什么,以便其他有相同问题的人可以受益。这不是答案,可能是评论。如果链接回答了问题,则应将其标记为副本。
<DatePicker
  className={styles.datePicker}
  selected={moment(this.props.endDate)}
  onChange={this.handleChangeEnd}
/>