
Prisma์์
new Date()๋ก ์ ์ฅํ ๊ฐ์ด ์string์ผ๋ก ๋์ฌ๊น?
์ ์ฅ seed.ts ํ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Prisma๋ก ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ด๋ ๊ฒ ์ ์ฅํ์ต๋๋ค.
deadline: new Date("2025-12-31")
DB์๋ timestamp ํ์
์ผ๋ก ์ ์ ์ฅ๋๊ณ , ๋ฌธ์ ์์ด ๋ณด์์ต๋๋ค.
ํ์ง๋ง ๊ฐ์ ๊บผ๋ด์ ์ฝ์์ ์ฐ์ด๋ณด๋, ํ์
์ด ๋ฌธ์์ด(string)๋ก ๋์๊ณ ,
Date ๊ฐ์ฒด์ธ์ง ํ์ธํ๋ instanceof Date ๊ฒฐ๊ณผ๋ false์์ต๋๋ค.
console.log(typeof project.deadline); // string
console.log(project.deadline instanceof Date); // false
Prisma๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ DateTime ํ๋๋ฅผ JavaScript์ Date ๊ฐ์ฒด๋ก ๋ฐํํฉ๋๋ค.
๊ทธ๋์ ์๋ฒ ๋ด๋ถ์์ console.log(project.deadline instanceof Date)๋ฅผ ํ๋ฉด true๊ฐ ๋์ต๋๋ค.
ํ์ง๋ง, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋๋ ๋ณดํต JSON ํฌ๋งท์ผ๋ก ์ง๋ ฌํํด์ ์ ๋ฌํ๋๋ฐ,
์ด ๊ณผ์ ์์ Date ๊ฐ์ฒด๋ ์๋์ผ๋ก ISO 8601 ๋ฌธ์์ด (์: "2025-12-31T00:00:00.000Z")๋ก ๋ณํ๋ฉ๋๋ค.
์ด ์ง๋ ฌํ ๊ณผ์ ์ JSON.stringify()๋ Next.js์ NextResponse.json() ๊ฐ์ ํจ์๊ฐ ์ํํฉ๋๋ค.
์ฆ,
Date ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ , Date ๊ฐ์ฒด๊ฐ ๋ฌธ์์ด๋ก ๋ณํ๋์ด ์ ์ก๋๊ณ , new Date()๋ก ๊ฐ์ธ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.ํด๋ผ์ด์ธํธ์์ ๋ฐ์ ๋ฌธ์์ด์ ๋ค์ Date ๊ฐ์ฒด๋ก ๋ณํํด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
const deadline = new Date(project.deadline);
console.log(deadline instanceof Date); // true
console.log(deadline.getFullYear()); // 2025
| ์ ์ฅ ์ | ๋ถ๋ฌ์ฌ ๋ (Prisma) | API ์๋ต / ํด๋ผ์ด์ธํธ์์ | ํ์ |
|---|---|---|---|
new Date("2025-12-31") | Date ๊ฐ์ฒด | ISO 8601 ๋ฌธ์์ด | string |
Prisma๋ ๋ ์ง๋ฅผ ์ ์ฅํ ๋ Date ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ,
๊ฐ์ ธ์ฌ ๋๋Date ๊ฐ์ฒด๋ก ๋ฐํํ์ง๋ง,
JSON์ผ๋ก ์๋ตํ ๋๋ ๋ฌธ์์ด๋ก ๋ณํ๋์ด ํด๋ผ์ด์ธํธ์์ ๋ฐ์ต๋๋ค.
=> NextResponse.json์.json() ๋๋ฌธ์ Date๊ฐ ๋ฌธ์์ด๋ก ๋ฐ๋๊ฒ ๋ฉ๋๋ค.
์ ๊ฐ ์ค์ ๋ก ์ ์ฉํ ๋ ์ง ํฌ๋งท ํจ์์ ์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// .helper.ts
export const convertDateToString = (date: Date, separator = ""): string => {
if (!date || !(date instanceof Date)) {
console.error("Invalid Date");
return ""; // ๋น ๋ฌธ์์ด ๋ฐํ
}
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date.getDate().toString().padStart(2, "0");
switch (separator) {
case "ko":
return `${year}๋
${month}์ ${day}์ผ`;
default:
return `${year}${separator}${month}${separator}${day}`;
}
};
<p className="text-gray-600">
๐ ๋ง๊ฐ์ผ: {convertDateToString(new Date(project.deadline), '-')}
</p>
์ด๋ ๊ฒ new Date()๋ก ๋ฌธ์์ด์ ๋ค์ ๊ฐ์ธ์ Date ๊ฐ์ฒด๋ก ๋ง๋ ํ ํฌ๋งท ํจ์์ ์ ๋ฌํ๋ฉด,
์ํ๋ ํ์์ผ๋ก ๋ ์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค.