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

问题设定日期

沃阳飙
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

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

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

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

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

  • 我得到一个日历实例 在一个移动显示周六为周末而在另一个它显示周日为周末两个设备的时区是相同的 如果我将日历实例区域设置为美国或任何其他国家/地区,它可以完美运行。但我不希望它是恒定的。我希望它是区域性的,但在所有设备上都是一致的 如果时区相同,我希望两台设备上的周末都一样