انتخابگر دامنه ای از زمان
برای استفاده از حالت range هم باید مقدار value تون آرایه باشه . حالا میتونه این آرایه خالی باشه یعنی [] باشه که در این صورت هیچ دامنه ی تاریخی در دیتپیکرتون نشون داده نمیشه تا خود کاربر یکی رو انتخاب کنه، یا میتونید خودتون یک مقدار رو به عنوان مقدار اولیه تعریف کنید. فقط نکته ای که باید در هنگام مشخص کردن مقدار اولیه در نظر بگیریید اینه که در حالت range آرایه شما باید یک یا دو تا تاریخ داشته باشه و اگه از دوتا بیشتر باشه فقط تاریخ اول و آخر موجود در اون آرایه در نظر گرفته میشن.
تعریف کردن مقدار اولیه هم که خیلی سادست ، من اینجا یک ارایه که داخلش دوتا تاریخ هست که اولیش 4 روز قبل و دومیش 4 روز بعد هست رو در آرایه قرار میدم تا ببینید چجوری کار میکنه :
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
const [values, setValues] = useState([
new DateObject({ calendar: persian }).subtract(4, "days"),
new DateObject({ calendar: persian }).add(4, "days")
])
.
.
.
<DatePicker
value={values}
onChange={setValues}
range
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
جداکننده سفارشی
مقدار پیش فرض پراپ dataSeparator در حالت دامنه ' ~ ' است
<DatePicker
range
dateSeparator=" تا "
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
افکت دامنه ای از زمان
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
const [values, setValues] = useState([
new DateObject({ calendar: persian })
])
.
.
.
<Calendar
value={values}
onChange={setValues}
range
rangeHover
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
پنل تاریخ ها
همانطور که در مثال موجود در قسمت انتخابگر چندتایی هم اشاره شد ، برای مشاهده لیست تاریخ ها باید پلاگین DatePanel رو import کنید:
import DatePanel from "react-multi-date-picker/plugins/date_panel"
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
<DatePicker
range
plugins={[
<DatePanel position="left" />
]}
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
نمایش تمام روزهای داخل دامنه
همانطور که در مثال بالا مشاهده می کنید، در حالت range، فقط تاریخ های شروع و پایان در DatePanle نمایش داده می شود.
اما اگر می خواهید هر یک از تاریخ های مابین شروع و پایان را در پنل تاریخ ها مشاهده کنید ، می توانید از پراپرتی eachDaysInRange استفاده کنید.
به همین ترتیب ، در onChange نیز فقط تاریخ شروع و پایان داده می شود و اگر می خواهید تاریخ های مابین شروع و پایان را داشته باشید ، می توانید از فانکشن getAllDatesInRange استفاده کنید.
فقط بخاطر داشته باشید که فعال کردن ویژگی eachDaysInRange در دامنه های بزرگی از تاریخ ممکن است باعث کندی رندر ری اکت شود ، بنابراین بهتر است DatePicker خود را با minDate و maxDate محدود کنید.
در مثال زیر ، DatePicker محدود به آغاز و پایان ماه جاری است.
import DatePicker, { DateObject, getAllDatesInRange } from "react-multi-date-picker"
import DatePanel from "react-multi-date-picker/plugins/date_panel"
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
const [dates, setDates] = useState([])
const [allDates, setAllDates] = useState([])
.
.
.
<div>
<DatePicker
range
calendarPosition="top-left"
fixMainPosition
value={dates}
minDate={new DateObject({ calendar: persian }).toFirstOfMonth()}
maxDate={new DateObject({ calendar: persian }).toLastOfMonth()}
onChange={dateObjects => {
setDates(dateObjects)
setAllDates(getAllDatesInRange(dateObjects))
}}
plugins={[
<DatePanel eachDaysInRange position="left" />
]}
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
{dates.length > 1 &&
<div>
<h5>
All Dates between {dates[0].format()} and {dates[1].format()}:
</h5>
<ul>
{allDates.map((date, index) => <li key={index}>{date.format()}</li>)}
</ul>
</div>
}
</div>
انتخابگر هفته
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
<DatePicker
range
weekPicker
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
انتخابگر دامنه ای از ماه ها
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
<DatePicker
onlyMonthPicker
range
plugins={[
<DatePanel />
]}
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>
انتخابگر دامنه ای از سال ها
import persian from "react-date-object/calendars/persian"
import persian_fa from "react-date-object/locales/persian_fa"
.
.
.
<DatePicker
onlyYearPicker
range
plugins={[
<DatePanel />
]}
calendar={persian}
locale={persian_fa}
calendarPosition="bottom-right"
/>