Skip to content

๐Ÿ‡ฐ๐Ÿ‡ท Vue์—์„œ dayjs๋กœ ํ•œ๊ตญ ์‹œ๊ฐ„(KST) ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฒ• ์ •๋ฆฌ โ€‹

์•ˆ๋…•ํ•˜์„ธ์š”! ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์ƒ์šฑ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜„
Vue ํ”„๋กœ์ ํŠธ ํ•˜๋‹ค ๋ณด๋ฉด ๋‚ ์งœ ๋‹ค๋ฃฐ ์ผ์ด ์ง„์งœ ๋งŽ์ฃ .
๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์‹œ๊ฐ„, ์ฑ„ํŒ… ์‹œ๊ฐ„, ์˜ˆ์•ฝ ์‹œ๊ฐ„ ๋“ฑ๋“ฑโ€ฆ
์ด๋Ÿด ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ new Date() ์“ฐ๋ฉด์„œ ๊ณ ์ƒํ•˜๋‹ค๊ฐ€,
์ €๋Š” ์š”์ฆ˜ dayjs๋ฅผ ์• ์šฉํ•˜๊ณ  ์žˆ์–ด์š”.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” dayjs๋ฅผ Vue์—์„œ ์–ด๋–ป๊ฒŒ ์„ธํŒ…ํ•˜๋Š”์ง€,
๊ทธ๋ฆฌ๊ณ  ํ•œ๊ตญ ์‹œ๊ฐ„(KST) ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ๋ฅผ ํฌ๋งทํ•˜๋Š” ๋ฒ•๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”.


โœ… 1. dayjs ์„ค์น˜ํ•˜๊ธฐ โ€‹

๋จผ์ € ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ถ€ํ„ฐ ์„ค์น˜ํ•ด์š”:

bash
npm install dayjs

์šฐ๋ฆฌ๊ฐ€ ํ•œ๊ตญ ์‹œ๊ฐ„(KST)์„ ๋‹ค๋ฃจ๋ ค๋ฉด timezone ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ๊ฐ™์ด ์„ค์น˜ํ•ด์ค˜์•ผ ํ•ด์š”:

bash
npm install dayjs-plugin-utc dayjs-plugin-timezone

๐Ÿงฉ 2. ํ”Œ๋Ÿฌ๊ทธ์ธ extend ํ•˜๊ธฐ โ€‹

dayjs๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง์ ‘ extend() ํ•ด์ค˜์•ผ ์ž‘๋™ํ•ด์š”.
ํŠนํžˆ timezone ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์“ฐ๋ ค๋ฉด utc ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ๋จผ์ € extend ํ•ด์ค˜์•ผ ํ•ด์š”!

js
// utils/dayjs.js ๋˜๋Š” composables/dayjs.js ๊ฐ™์€ ํŒŒ์ผ๋กœ ๋งŒ๋“ค๊ธฐ ์ถ”์ฒœ
import dayjs from "dayjs";
import utc from "dayjs-plugin-utc";
import timezone from "dayjs-plugin-timezone";

// ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๋ก (์ˆœ์„œ ์ค‘์š”!)
dayjs.extend(utc);
dayjs.extend(timezone);

// ๊ธฐ๋ณธ ํƒ€์ž„์กด์„ 'Asia/Seoul'๋กœ ์ง€์ •
dayjs.tz.setDefault("Asia/Seoul");

export default dayjs;

์ด์ œ import dayjs from '@/utils/dayjs'๋งŒ ํ•˜๋ฉด, ํ•ญ์ƒ ์„œ์šธ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์š”. ํŽธํ•˜์ฃ ?


๐ŸŒ 3. ํ•œ๊ตญ์–ด(locale) ์„ค์ •๊นŒ์ง€ ํ•ด์ฃผ๊ธฐ โ€‹

ํ•œ๊ตญ์‹์œผ๋กœ '์˜ค์ „', '์›”์š”์ผ' ๊ฐ™์€ ํ‘œํ˜„์„ ์“ฐ๋ ค๋ฉด, ko locale๋„ ์ ์šฉํ•ด์ค˜์•ผ ํ•ด์š”:

bash
npm install dayjs

(์ด๋ฏธ ์„ค์น˜ํ–ˆ์œผ๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ)

js
// utils/dayjs.js์— ์ด์–ด์„œ
import "dayjs/locale/ko";

dayjs.locale("ko"); // ๋‚ ์งœ ํ‘œ์‹œ๋ฅผ ํ•œ๊ตญ์–ด๋กœ

๐Ÿงช 4. ์‚ฌ์šฉ ์˜ˆ์‹œ โ€‹

์ด์ œ ์–ด๋””์„œ๋“  ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ์š”:

js
import dayjs from "@/utils/dayjs";

const now = dayjs();
console.log(now.format("YYYY๋…„ MM์›” DD์ผ A hh์‹œ mm๋ถ„"));
// ๐Ÿ‘‰ ์˜ˆ: 2025๋…„ 05์›” 08์ผ ์˜คํ›„ 03์‹œ 21๋ถ„

๋˜๋Š” ํŠน์ • ์‹œ๊ฐ„ ํฌ๋งทํŒ…:

js
const formatted = dayjs("2025-05-08T06:00:00Z")
  .tz("Asia/Seoul")
  .format("YYYY-MM-DD HH:mm");

console.log(formatted); // ๐Ÿ‘‰ 2025-05-08 15:00

๐Ÿ—‚๏ธ 5. ์ž์ฃผ ์“ฐ๋Š” ํฌ๋งท ์ •๋ฆฌ โ€‹

๋ชฉ์ ํฌ๋งท ๋ฌธ์ž์—ด๊ฒฐ๊ณผ ์˜ˆ์‹œ
๋‚ ์งœ๋งŒYYYY-MM-DD2025-05-08
๋‚ ์งœ+์‹œ๊ฐ„YYYY-MM-DD HH:mm2025-05-08 15:00
ํ•œ๊ตญ์‹ ํ‘œ๊ธฐYYYY๋…„ M์›” D์ผ dddd2025๋…„ 5์›” 8์ผ ๋ชฉ์š”์ผ
์˜ค์ „/์˜คํ›„A hh:mm์˜คํ›„ 03:00

โ— ์ž ๊น! .tz() ์•ˆ ๋˜๋Š” ์ด์œ ? โ€‹

ํ˜น์‹œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์งฐ๋Š”๋ฐ .tz() ํ•จ์ˆ˜๊ฐ€ undefined๋ผ๊ณ  ์—๋Ÿฌ ๋‚˜๋‚˜์š”?

js
import dayjs from "dayjs";

const time = dayjs().tz("Asia/Seoul"); // โŒ ์—๋Ÿฌ ๋ฐœ์ƒ

๊ทธ๋Ÿด ๋• ํ”Œ๋Ÿฌ๊ทธ์ธ extend๋ฅผ ์•ˆ ํ•œ ๊ฑฐ์˜ˆ์š”!
๋ฐ˜๋“œ์‹œ ์ด๋ ‡๊ฒŒ ํ•ด์ค˜์•ผ .tz()๊ฐ€ ์ž‘๋™ํ•ด์š”:

js
dayjs.extend(utc);
dayjs.extend(timezone);

๐Ÿ”š ๋งˆ๋ฌด๋ฆฌ โ€‹

์ €๋Š” ์˜ˆ์ „์—” moment.js ๋งŽ์ด ์ผ๋Š”๋ฐ, ์š”์ฆ˜์€ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ dayjs๋กœ ๊ฐˆ์•„ํƒ”์–ด์š”.
Vue๋ž‘๋„ ์ž˜ ์–ด์šธ๋ฆฌ๊ณ , ํŠนํžˆ ํ•œ๊ตญ ์‹œ๊ฐ„(KST) ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ ๋‹ค๋ฃฐ ์ผ์ด ๋งŽ์€ ๋ถ„๋“ค์—๊ฒ ์ •๋ง ๊ฐ•์ถ”์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์ด Vue์—์„œ ๋‚ ์งœ ๋‹ค๋ฃฐ ๋•Œ ๋„์›€๋์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”!

MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฆด๋ฆฌ์ฆˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.