我正在使用React-Datepicker和MomentJS。但是当我想使用Moment设置starDate时,该值在datepickerfield中给出无效日期。
当我在控制台中记录this.state.start日期时,控制台会显示以下内容:“开始日期: 27-11-2018”,格式为“DD-MM-YYYY”。此格式也用于DatePicker组件。
import * as React from "react";
import * as ReactDOM from "react-dom";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import * as moment from "moment";
import "moment/locale/nl";
export class DateContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
startDate: moment().format('DD-MM-YYYY'),
};
}
render() {
console.log('startdate:',this.state.startDate);
return (
<div className="date-Filter">
<div className="date-Filter-Title">Release Date</div>
<DatePicker
onChange={this.handleStartDate}
selected={this.state.startDate}
dateFormat="DD-MM-YYYY"
isClearable={true}
placeholderText="Select a date other than today or yesterday"
fixedHeight={true}
tetherConstraints={ [] }
locale="nl"
popperPlacement="right-start"
popperModifiers={{
flip: {
enabled: false
},
preventOverflow: {
enabled: true,
escapeWithReference: false
}
}}
selectsStart
startDate={this.state.startDate}
className="startDate"
showMonthDropdown
showYearDropdown
/>
</div>
);
}
}
有人能解释一下为什么它在浏览器中显示无效日期吗。
我的依赖项:
"dependencies": {
"moment": "^2.22.2",
"react": "^16.6.0",
"react-datepicker": "^2.0.0",
"react-dom": "^16.6.0",
"sass-loader": "^7.1.0",
"searchkit": "^2.3.1-alpha.4"
},
@埃尔维拉,我在使用react时遇到了同样的挑战-datepicker@2.0.0
。遵守您使用的任何第三方软件包是至关重要的。ES6推广的模块问题被视为时刻。js
从时刻起,在react datepicker中有一个额外的行李。js
是一个多功能包,即从“时刻”导入时刻
模块的概念使我们能够通过简单地导出对象、函数、类或变量,然后在需要时将它们导入其他文件中,从而使外部世界可以使用它们。
从react开始-datepicker@2.0.0
,瞬间。js作为一个依赖项被删除,团队开始在datepicker中使用本机javascript日期对象和日期fns来实现所有日期功能。检查react datepicker日历组件的propTypes
,您会注意到所有日期都声明为propTypes。instanceOf(日期)
。
解决方案:坚持使用本机JavaScript日期对象。用户从日历中选择日期后(读取:react datepicker),您始终可以使用moment转换该日期对象。js
转换为任何格式。
export class DateContainer extends React.Component {
constructor(props) {
super(props);
// Used 'started' to avoid name conflicts, and return date object
this.state = { started: new Date(), };
}
render() {
const { started } = this.state
return (
// other jsx...
<DatePicker
// other props...
selected={started}
startDate={started}
/>
);
}
}
下面是我如何处理这种情况的:环境:react@16.9.0,反应-redux@7.1.1,反应-datepicker@2.0.0, yup@0.27.0和Formik@1.5.8(在react中处理表单,使其变得简单)。
// stateless component
const InputForm = ({
// other destructered props...
dispatch = f => f
}) => {
const values = {
// initial state
}
return (
<Formik
// other props...
onSubmit={
async (values) => {
// Here is my solution...
// convert date object from react-datepicker using moment.js,
// before i dispatch my state object.
const userData = {
...values,
start_date: moment(values.start_date).format('YYYY-MM-DD')
}
await dispatch(someAction(userData));
// ...
}
}
/>
)
};
export default connect()(InputForm);
从Hacker0x01-"直到版本1.8.0,这个包使用Moment.js.从v2.0.0开始,我们切换到使用本机日期对象来减小包的大小。如果您正在从1.8.0切换到2.0.0或更高版本,请参阅上面的更新示例,查看示例网站以获取最新示例。"
https://github.com/Hacker0x01/react-datepicker
我也有类似的问题。我将尝试在datepicker完成它的工作后,将本地日期转换为片刻。
使用startDate:moment()。toDate()
。
。format('DD-MM-YYYY')
返回一个字符串,而DatePicker react组件的选定属性需要一个日期对象。
我想验证用户输入的日期是否有效,格式是否正确。我使用这个块来检查用户的输入,但是当我输入一个无效的日期时,打印语句会给我奇怪的输出。 当是时,它打印
问题内容: alert(new Date(‘2010-11-29’)); chrome,ff没问题,但是Safari会喊“无效日期”。为什么呢 编辑:好的,根据下面的评论,我使用了字符串解析并尝试了以下操作: 编辑 :似乎人们仍在这里着陆-今天,我将使用或完成此操作。Date-fns也非常轻巧。 问题答案: 该模式不是构造函数的官方支持格式。Firefox似乎支持它,但不要指望其他浏览器也这样做。
我正面临一个前所未有的奇怪问题。我有一个以毫秒为单位的日期,希望将其显示为可读的日期。这是我的代码: 如你所见,我只想创建一个显示时间跨度的字符串。当我调试代码时,日期对象包含正确的值,而
问题内容: 我想在客户端验证日期,因此编写了以下代码。但是我没有得到异常,而是得到了2月31日日期字符串的正确日期对象,这显然是无效的日期。 输出 :2015-02-28T11:30:59 有谁知道为什么要解析这个日期而不是抛出异常。 问题答案: 您只需要严格。 解析文本字符串分为两个阶段。阶段1是根据添加到构建器中的字段进行的基本文本解析。阶段2将解析的字段值对解析为日期和/或时间对象。此样式用
我想验证用户输入的日期是否有效,格式是否正确。我使用这个块来检查用户的输入,但是当我输入无效日期时,print语句会给我奇怪的输出。 当是时,它打印
问题内容: 我遇到的问题是PrimesFaces 3.4.1日历。当使用通过按钮或在输入字段焦点上激活的弹出日期选择器时,您只能选择有效的日期,该日期很好,很开心! 当您在输入字段中手动添加日期时,就会出现问题,如果您添加了无效日期,PrimeFaces日历组件会尽最大的努力将其转换为有效日期然后发送,这意味着后端验证是不可行的。以下是一些有趣的翻译: 30/02/2012变成2/6/2014 3