Skip to content

๋ชจ๋˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ Day.js๋Š” Moment.js ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Date ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. Moment.js๊ฐ€ ๋”์ด์ƒ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Moment์™€ ๋น„์Šทํ•˜๋ฉด์„œ๋„ ๊ฐ€๋ฒผ์šด ํŒจํ‚ค์ง€ ์‚ฌ์ด์ฆˆ ๋•๋ถ„์— ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ฑ„ํƒ๋˜์–ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ๋Š” Quasar ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Date Utils๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜ Day.js ๋ฅผ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

TL;DR โ€‹

  • format : ํƒ€์ž„์กด ์˜คํ”„์…‹์ด ํฌํ•จ๋œ ๋ฌธ์ž์—ด ๋˜๋Š” ํŠน์ • ํŒจํ„ด์˜ ๋ฌธ์ž์—ด์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • toISOString : UTC(Z) ๊ธฐ๋ฐ˜ ๋ฌธ์ž์—ด์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • valueOf : ๋ฐ€๋ฆฌ์ดˆ ๊ธฐ๋ฐ˜ ์œ ๋‹‰์Šค ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • toDate : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Date ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • tz: ์‹œ๊ฐ„๋Œ€๊ฐ€ ์„ค์ •๋œ ๋‚ ์งœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • tz.setDefault: ๊ธฐ๋ณธ ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ

Setup with Vue 3 โ€‹

js
import dayjs from 'dayjs'
import { createApp } from 'vue'
const app  = createApp(App)
    
app.config.globalProperties.$dayjs = dayjs
    
app.mount("#app')

๋ณธ ๊ธ€์˜ ๋ชจ๋“  ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ECMAScript 2015(ES6)๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” import, export ๋ฅผ ์ด์šฉํ•˜๋Š” ESM ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

Day.js creates a wrapper for the Date object โ€‹

Day.js ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Date ๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ์‚ฌํŒŒ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ Invalid Date ๊ฐ€ ํ‘œ์‹œ๋œ ์ด์Šˆ๋„ ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Date ๊ฐ์ฒด์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  Day.js ๊ฐ์ฒด๋Š” immutable ํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์— ์ ์šฉ๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค.

js
import dayjs from 'dayjs'
dayjs() // Same as "dayjs(new Date())"
dayjs(1755874800000).format() // 2025-08-23T00:00:00+09:00

Day.js ๊ธฐ๋ณธ ์‹œ๊ฐ„๋Œ€ ์„ค์ •ํ•˜๊ธฐ โ€‹

Day.js ๋Š” ๋ธŒ๋ผ์šฐ์ € ํƒ€์ž„์กด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ ์งœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋งŒ์•ฝ, UTC ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •์˜ ํƒ€์ž„์กด์„ ์ ์šฉํ•˜๋ ค๋ฉด UTC ์™€ TimeZone ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ Intl.RelativeTimeFormat ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋Œ€์ ์ธ ์‹œ๊ฐ„ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ RelativeTime ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒ๋Œ€์ ์ธ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ๋Œ€์ ์ธ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•  ๋•Œ์—๋Š” ๋กœ์ผ€์ผ ์ •๋ณด๋„ ์„ค์ •ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

js
import { boot } from 'quasar/wrappers';

import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/ko'

export default boot(({ app }) => {
    dayjs.extend(utc)
    dayjs.extend(timezone)
    dayjs.extend(relativeTime);

    dayjs.tz.setDefault('Asia/Seoul')
    dayjs.locale('ko')

    app.config.globalProperties.$dayjs = dayjs
})

Day.js ๊ฐ์ฒด๋ฅผ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ โ€‹

Day.js ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Date ๊ฐ์ฒด์™€ ๋™์ผํ–ˆ๋‹ค. ISO 8601 ํŒจํ„ด์˜ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฃผ๋กœ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์— ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ˆซ์ž ํ˜•ํƒœ์˜ ์‹œ๊ฐ„๊ฐ’์ธ ์ˆซ์ž ํ˜•ํƒœ์˜ Unix Timestamp๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์™€ ๋ฐ˜๋Œ€๋กœ format ํ•จ์ˆ˜๋กœ ํŠน์ • ํŒจํ„ด์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„ API ๊ฐ€ ์œ ๋‹‰์Šค ํƒ€์ž„์Šคํƒฌํ”„ ํ˜•ํƒœ์˜ ์ •๋ณด๋ฅผ ์š”๊ตฌํ•˜๋„๋ก ์ž‘์„ฑ๋˜์–ด์žˆ๋‹ค๋ฉด valueOf ํ•จ์ˆ˜๋กœ ๊ฐ€์ ธ์™€์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ํƒ€์ž„์กด์˜ ํƒ€์ž„ ์˜คํ”„์…‹์ด ํฌํ•จ๋œ ISO 8601 ํ˜•์‹์œผ๋กœ ํฌ๋งทํŒ…์„ ์ง€์›ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ, UTC ๊ธฐ์ค€์˜ ISO 8601 ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” toISOString ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

js
const d = dayjs(1755874800000)
d.format() // 2025-08-23T00:00:00+09:00
d.toISOString() // 2025-08-22T15:00:00.000Z
d.valueOf() // 1755874800000

Released under the MIT License.