본문 바로가기

Libraries/React

[React] input type="date" 기본값, 초기값을 현재시간(오늘날짜)으로 설정하기

728x90

 

 

input type="date" 에서 기본으로 보이는 날짜를 오늘 날짜로 설정되게끔 만들어보자! 

 

 

 

 

 1. input 태그를 작성한다. 

 

import { useNavigate } from "react-router-dom";
import MyButton from "../components/MyButton";
import MyHeader from "../components/MyHeader";
import { useState } from "react";

const New = () => {
  const navigate = useNavigate();
  return (
    <div>
      <MyHeader
        headText={"새 일기쓰기"}
        leftChild={
          <MyButton text={"< 뒤로가기"} onClick={() => navigate(-1)} />
        }
      />
      <div>
        <section>
          <h4>오늘은 언제인가요?</h4>
          <div className="input-box">
            <input type="date" /> // (1) input 태그 작성
          </div>
        </section>
      </div>
    </div>
  );
};

export default New;

 

 

 

 

 

 2. date 상태(state)를 생성하고, input에 onChange 이벤트를 달아준다. 

 

import { useNavigate } from "react-router-dom";
import MyButton from "../components/MyButton";
import MyHeader from "../components/MyHeader";
import { useState } from "react";

const New = () => {
  const [date, setDate] = useState(); // (2) date state 생성 (input에 저장되는 숫자를 state로 핸들링)

  const navigate = useNavigate();

  return (
    <div>
      <MyHeader
        headText={"새 일기쓰기"}
        leftChild={
          <MyButton text={"< 뒤로가기"} onClick={() => navigate(-1)} />
        }
      />
      <div>
        <section>
          <h4>오늘은 언제인가요?</h4>
          <div className="input-box">
            <input
              value={date} // value에 state 넣기
              type="date"
              onChange={(e) => setDate(e.target.value)}  // (3) onChange 이벤트 달기
            />
          </div>
        </section>
      </div>
    </div>
  );
};

export default New;

 

 

콘솔을 확인해보면 state를 확인할 수 있다.

 

 

 

 

 3.  getStringDate 함수를 만든다. 

 

import { useNavigate } from "react-router-dom";
import MyButton from "../components/MyButton";
import MyHeader from "../components/MyHeader";
import { useState } from "react";

const getStringDate = (date) => {
  return date.toISOString().slice(0, 10); // (4) toISOString 메서드 이용
};

const New = () => {
  console.log(getStringDate(new Date())); // 콘솔에 찍어보기

  const [date, setDate] = useState();

  const navigate = useNavigate();

  return (
    <div>
      <MyHeader
        headText={"새 일기쓰기"}
        leftChild={
          <MyButton text={"< 뒤로가기"} onClick={() => navigate(-1)} />
        }
      />
      <div>
        <section>
          <h4>오늘은 언제인가요?</h4>
          <div className="input-box">
            <input
              value={date}
              type="date"
              onChange={(e) => setDate(e.target.value)}
            />
          </div>
        </section>
      </div>
    </div>
  );
};

export default New;

 

 

콘솔 결과 (참고로 콘솔 찍을 당시 현재 날짜는 2023/11/10이었다.)

 

 

date 객체에는 toISOString이라는 메서드가 있는데, 이는 ISO 양식의 문자열을 반환하는 메서드이다.

반환값은 언제나 24글자 또는 27글자(각각 YYYY-MM-DDTHH:mm:ss.sssZ 또는 ±YYYYYY-MM-DDTHH:mm:ss.sssZ)이다. 

여기서 원하는 부분은 YYYY-MM-DD까지이므로  0부터 9까지 자르면 년월일까지 받아올 수 있다.

 

 

 

 

 4. date state의 초깃값을 getStringDate 함수를 호출한 것으로 바꿔준다. 

 

import { useNavigate } from "react-router-dom";
import MyButton from "../components/MyButton";
import MyHeader from "../components/MyHeader";
import { useState } from "react";

const getStringDate = (date) => {
  return date.toISOString().slice(0, 10);
};

const New = () => {
  const [date, setDate] = useState(getStringDate(new Date())); // (5) 초기값 설정

  const navigate = useNavigate();

  return (
    <div>
      <MyHeader
        headText={"새 일기쓰기"}
        leftChild={
          <MyButton text={"< 뒤로가기"} onClick={() => navigate(-1)} />
        }
      />
      <div>
        <section>
          <h4>오늘은 언제인가요?</h4>
          <div className="input-box">
            <input
              value={date}
              type="date"
              onChange={(e) => setDate(e.target.value)}
            />
          </div>
        </section>
      </div>
    </div>
  );
};

export default New;

 

 

 

위와 같이 새일기쓰기 페이지가 켜지자마자 날짜창에 오늘의 날짜가 기본적으로 들어가있게 만들었다!

 

 

728x90