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

问题设定日期

沃阳飙
2023-03-14

我无法确定日期。据我所见,它只设定了正确的日期,而不是月份和年份。我不明白我做错了什么。

这是我的密码:

格式化ate.js

// formats date to 'yyyy-mm-dd'
const formatDate = (date) => {
  var d = new Date(date),
    month = '' + (d.getMonth() + 1),
    day = '' + d.getDate(),
    year = d.getFullYear();

  if (month.length < 2) month = '0' + month;
  if (day.length < 2) day = '0' + day;

  return [year, month, day].join('-');
}

export default formatDate;

和组件:

import React, { useState, useEffect } from "react";
import { YearPicker, MonthPicker, DayPicker } from "react-dropdown-date";
import { format } from "date-fns";
import formatDate from "./formatDate";
import "./styles.scss";

const DOB = () => {
  const [day, setDay] = useState('');
  const [month, setMonth] = useState('');
  const [year, setYear] = useState('');
  const [selectedDate, setSelectedDate] = useState('');

  useEffect(() => {
    setSelectedDate(formatDate(day, month, year));
    
  }, [day, month, year]);
 console.log('formatDate===', formatDate(day, month, year))
 console.log('selectedDate', selectedDate);
  
  // console.log(day, month, year);
  
  return (
    <div className="dob__main">
      <div>
        <DayPicker
          classes={"dob__day"}
          defaultValue={"DD"}
          year={year}
          month={month}
          endYearGiven
          required={true}
          value={day}
          onChange={day => {
            setDay(day);
            console.log(day);
          }}
          id={"day"}
          name={"day"}
        />
        <MonthPicker
          classes={"dob__month"}
          defaultValue={"MM"}
          endYearGiven 
          year={year}
          required={true} 
          value={month}
          onChange={month => {
            setMonth(month);
            console.log(month);
          }}
          id={"month"}
          name={"month"}
        />
        <YearPicker
          classes={"dob__year"}
          defaultValue={"YYYY"}
          start={1901} 
          end={new Date().getFullYear()} 
          reverse 
          required={true} 
          value={year} 
          onChange={year => {
            setYear(year);
            console.log(year);
          }}
          id={"year"}
          name={"year"}
        />
      </div>
    </div>
  );
};

export default DOB;

我使用的npm反应下拉日期,并遵循从他们的留档的例子。也许我用错了useState或Use效应钩子?也许有人与React和日期的经验可以帮助我解决这个问题。

共有1个答案

梁丘兴腾
2023-03-14

这是我能做的最好的,而不需要改变你的代码。我添加了一个条件,仅当选择了所有三个日、月和年时才更新selectedDate状态。

您正在使用的库返回从索引-0开始的月份,因此我还增加了1,以便在formatDate方法中获得正确的月份号。

function App() {
    const [day, setDay] = useState('');
    const [month, setMonth] = useState('');
    const [year, setYear] = useState('');
    const [selectedDate, setSelectedDate] = useState('');

    const formatDate = (d, m, y) => {
        let day = d, month = (parseInt(m) + 1).toString(), year = y;
        if (month.length < 2) month = '0' + month;
        if (day.length < 2) day = '0' + day;
        return ([year, month, day].join('-'))
    }
    useEffect(() => {
        if (day && month && year) {
            setSelectedDate(formatDate(day, month, year));
        }
    }, [day, month, year]);

    const onDayChange = (day) => {
        setDay(day);
    };

    const onMonthChange = (month) => {
        setMonth(month);
    };

    const onYearChange = (year) => {
        setYear(year);
    };

    console.log('---selectedDate ----', selectedDate);

    return (
        <div className="dob__main">
            <div>
                <DayPicker
                    defaultValue={"DD"}
                    year={year}
                    month={month}
                    endYearGiven
                    value={day}
                    onChange={onDayChange}
                    id={"day"}
                    name={"day"}
                />
                <MonthPicker
                    defaultValue={"MM"}
                    endYearGiven
                    year={year}
                    value={month}
                    onChange={onMonthChange}
                    id={"month"}
                    name={"month"}
                />
                <YearPicker
                    defaultValue={"YYYY"}
                    start={1901}
                    end={new Date().getFullYear()}
                    reverse
                    value={year}
                    onChange={onYearChange}
                    id={"year"}
                    name={"year"}
                />
            </div>
        </div>
    );
};

export default App;
 类似资料:
  • 为了满足不同App的UI要求,FinClip SDK提供以下设置,供开发者灵活配置: 小程序在APP多入口的打开场景,是否支持通过按钮、文字、卡片、搜索等打开小程序,并指定打开页面? Android-支持(见 Android SDK 集成 - 4.1) iOS-支持(见 iOS SDK 集成 - 9.) 如何设置小程序中的转场动画(进入页面的方式)? Android-参考 [Android SDK

  • 例如:字符串日期:Wed Jan 15 14:29:00 2020,DB:2020-01-16 05:50:40.000000+0000 有时,我还会遇到这样的错误:DateOverflowWarning:有些时间戳比Python datetime所能表示的要大。时间戳从纪元开始以毫秒为单位显示。

  • 我已经成功地设置了Elasticsearch、Kibana等,当我运行:'sudo systemctl status Elasticsearch'时,它都运行得很好。 但是,当我执行“sudo systemctl status logstash”时,这是输出: 它无法启动logstash,我在网上读了很多文章,说这可能与路径或配置有关,但我没有找到一个正确的工作解决方案。 我已经下载了JDK,并遵

  • 可设定日期与时间。 自动设定 连接至PlayStation®Network时,自动取得日期与时间的信息。 手动设定 可手动设定年/月/日/时/分/秒(12小时制时亦可设定AM/PM)。 轻触[OK]后,即会自00秒开始计数。 手动设定(通过互联网) 轻触[手动设定(通过互联网)],可连接互联网取得日期与时间的信息。

  • 我使用实体管理器来创建一个本地查询。我的数据库是Postgres数据库。我请求的日期字段是这样建模的... 当我写这个的时候,一切都很好... 但是当我想使用setParameter函数时... 我有这个问题。。 知道吗?

  • 问题内容: 我需要一个具有日期和年份指定值的jsDate对象。我希望给我Date对象2000作为价值,但如果我的电脑的时间设定到芝加哥时区,我得到,和布宜诺斯艾利斯:。 有没有一种方法可以创建Date对象,并返回我们在构造函数中设置的日期,无论在用户计算机上设置了什么时区? 更新:我需要在另一个库中使用此Date对象(该库调用其方法,因此使用UTC getter并没有真正的帮助。 问题答案: 在J