여행 프로젝트를 구현하는데 있어 사용자가 달력에서 여행 시작일과 마치는 일자를 선택해서 input창에 반영시켜야 하는 기능이 있었고, 시간을 효율적으로 활용하기 위해서 react-calendar 라이브러리를 사용했다.
yarn add react-calendar
.react-calendar {
width: 350px;
max-width: 100%;
background: #ffff;
border: 1px solid #eeeeee;
font-family: Arial, Helvetica, sans-serif;
line-height: 1.125em;
border-radius: 10px;
box-shadow: 0px 0px 20px #e0e0e0;
}
.react-calendar__tile--now {
background: #ef5350;
color: #fafafa;
}
.react-calendar__tile--now:enabled:hover,
.react-calendar__tile--now:enabled:focus {
background: #ef5350;
color: #fafafa;
}
.react-calendar__tile--active {
background: #7fb77e;
color: white;
}
.react-calendar__tile--active:enabled:hover,
.react-calendar__tile--active:enabled:focus {
background: #7fb77e;
}
formatDay={(locale, date) => moment(date).format("DD")}
로 설정하면 됨yarn add moment
<Calendar
onChange={changeDate}
selectRange={true}
formatDay={(locale, date) => moment(date).format("DD")}
/>
import React, { useEffect, useState } from "react";
const [startDate, setStartDate] = useState();
const [endDate, setEndDate] = useState();
const changeDate = e => {
// event를 받아서 yyyy/mm/dd 형식으로 일자를 포맷팅해줌
// e[0]은 사용자가 여행 일자로 선택한 시작 일자가 들어감
// e[1]은 사용자가 여행 마치는 일자로 선택한 일자가 들어감
const startDateFormat = moment(e[0]).format("YYYY/MM/DD");
const endDateFormat = moment(e[1]).format("YYYY/MM/DD");
// 여행 시작일자와 마치는일자의 값이 변할 때마다 값을 다시 세팅해줌
setStartDate(startDateFormat);
setEndDate(endDateFormat);
};
<Calendar
onChange={changeDate} // 적용된 부분
selectRange={true}
formatDay={(locale, date) => moment(date).format("DD")}
/>
<Calendar
onChange={changeDate}
selectRange={true} // 적용된 부분
formatDay={(locale, date) => moment(date).format("DD")}
/>
<input
type="text"
className="w-full p-2 text-sm border-b-2 border-green1 outline-none opacity-70 my-5 bg-transparent"
placeholder="출발하는 날짜를 입력해주세요"
value={startDate || ""}
disabled
/>
<input
type="text"
className="w-full p-2 text-sm border-b-2 border-green1 outline-none opacity-70 bg-transparent"
placeholder="돌아오는 날짜를 입력해주세요"
value={endDate || ""}
disabled
/>
test