如何选择日期范围并在没有多个datepickers的情况下更新日期?

发布于 2025-02-12 21:44:08 字数 967 浏览 2 评论 0原文

我正在使用React-DatePicker,并且正在尝试提出逻辑以具有2个字段,并仅使用一个日期范围选择器更新开始日期和结束日期。我在这里写的逻辑是单独拥有2个日期选择器,但是我不希望它以这种方式。另外,我坚持反应日期,因为它允许我手动输入日期。

import React, { useState } from "react";

import DatePicker from "react-datepicker";

export default function TableDatePicker() {
 const [startDate, setStartDate] = useState(new Date());
 const [endDate, setEndDate] = useState(new Date());

 return (
   <div>
     <DatePicker
       selected={startDate}
       selectsStart
       startDate={startDate}
       endDate={endDate}
       onChange={date => setStartDate(date)}
     />
     <DatePicker
       selected={endDate}
       selectsEnd
       startDate={startDate}
       endDate={endDate}
       minDate={startDate}
       onChange={date => setEndDate(date)}
     />
   </div>
 );
}

我还从MUI/采摘者那里进行了一些研究,但是尽管其他期望是好的,但不允许手动输入日期。

我在这里错过了什么吗?

I'm using react-datepicker and I'm trying to come up with a logic to have 2 fields and update the start and end date using just one date range picker. The logic I wrote here is by having 2 date pickers individually, however I don't want it to be in this way. Also, I'm sticking to react-datepicker because it is allowing me to enter the dates manually.

import React, { useState } from "react";

import DatePicker from "react-datepicker";

export default function TableDatePicker() {
 const [startDate, setStartDate] = useState(new Date());
 const [endDate, setEndDate] = useState(new Date());

 return (
   <div>
     <DatePicker
       selected={startDate}
       selectsStart
       startDate={startDate}
       endDate={endDate}
       onChange={date => setStartDate(date)}
     />
     <DatePicker
       selected={endDate}
       selectsEnd
       startDate={startDate}
       endDate={endDate}
       minDate={startDate}
       onChange={date => setEndDate(date)}
     />
   </div>
 );
}

I also did some research on DateRange from mui/pickers but it is not permitting to enter the dates manually although other expectations are good.

Am I missing something here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风柔一江水 2025-02-19 21:44:08

react-datepicker文档中,它具有大约一个datepicker的日期范围

import React, { useState } from "react";

import DatePicker from "react-datepicker";

export default function TableDatePicker() {
    const [startDate, setStartDate] = useState(new Date());
    const [endDate, setEndDate] = useState(null);

    const onChange = (dates) => {
        const [start, end] = dates;
        setStartDate(start);
        setEndDate(end);
    };
    
    return (
        <DatePicker
            selected={startDate}
            onChange={onChange}
            startDate={startDate}
            endDate={endDate}
            selectsRange
            inline
        />
    );
}

以包含startdate,endDate和hidden

import React, { useState, useRef } from "react";
import dayjs from "dayjs";

function App() {
  const datePickerRef = useRef(null);
  const [startDate, setStartDate] = useState(new Date());
  const [endDate, setEndDate] = useState(null);
  const onChange = (dates) => {
    const [start, end] = dates;
    setStartDate(start);
    setEndDate(end);
  };
  return (
    <div>
      <div onClick={() => datePickerRef.current.setOpen(true)}>
        <input type="text" value={dayjs(startDate).format("MM/DD/YYYY")} />
        <input
          type="text"
          value={endDate ? dayjs(endDate).format("MM/DD/YYYY") : ""}
        />
      </div>
      <DatePicker
        selected={startDate}
        onChange={onChange}
        startDate={startDate}
        endDate={endDate}
        selectsRange
        ref={datePickerRef}
      />
    </div>
  );
}

,或者您可以创建2个自定义输入, CSS

.react-datepicker__input-container {
  display: none;
}

您可以在我的 codesandbox 。希望它有帮助!

In react-datepicker docs, it have example about date range for one datepicker

import React, { useState } from "react";

import DatePicker from "react-datepicker";

export default function TableDatePicker() {
    const [startDate, setStartDate] = useState(new Date());
    const [endDate, setEndDate] = useState(null);

    const onChange = (dates) => {
        const [start, end] = dates;
        setStartDate(start);
        setEndDate(end);
    };
    
    return (
        <DatePicker
            selected={startDate}
            onChange={onChange}
            startDate={startDate}
            endDate={endDate}
            selectsRange
            inline
        />
    );
}

or you can create 2 custom input for contain startDate, endDate and hidden the default react-datepicker input

import React, { useState, useRef } from "react";
import dayjs from "dayjs";

function App() {
  const datePickerRef = useRef(null);
  const [startDate, setStartDate] = useState(new Date());
  const [endDate, setEndDate] = useState(null);
  const onChange = (dates) => {
    const [start, end] = dates;
    setStartDate(start);
    setEndDate(end);
  };
  return (
    <div>
      <div onClick={() => datePickerRef.current.setOpen(true)}>
        <input type="text" value={dayjs(startDate).format("MM/DD/YYYY")} />
        <input
          type="text"
          value={endDate ? dayjs(endDate).format("MM/DD/YYYY") : ""}
        />
      </div>
      <DatePicker
        selected={startDate}
        onChange={onChange}
        startDate={startDate}
        endDate={endDate}
        selectsRange
        ref={datePickerRef}
      />
    </div>
  );
}

global css

.react-datepicker__input-container {
  display: none;
}

You can see in my codesandbox. Hope it helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文