当前位置: 首页 > 知识库问答 >
问题:

React Datepicker MomentJS无效日期

嵇浩淼
2023-03-14

我正在使用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"
  },

共有3个答案

富建章
2023-03-14

@埃尔维拉,我在使用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);
宣俊豪
2023-03-14

从Hacker0x01-"直到版本1.8.0,这个包使用Moment.js.从v2.0.0开始,我们切换到使用本机日期对象来减小包的大小。如果您正在从1.8.0切换到2.0.0或更高版本,请参阅上面的更新示例,查看示例网站以获取最新示例。"

https://github.com/Hacker0x01/react-datepicker

我也有类似的问题。我将尝试在datepicker完成它的工作后,将本地日期转换为片刻。

徐嘉勋
2023-03-14

使用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