๐Ÿ“… ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ ์งœ/์‹œ๊ฐ„ ๐Ÿ“…

5163 ๋‹จ์–ด beginnersjavascriptbestofdevwebdev

์†Œ๊ฐœ



Datetime๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•  ๋•Œ ์งœ์ฆ์ด ๋‚œ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„์ง ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ•˜์…จ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๊ณณ์— ๋„์ฐฉํ•˜๋ฉด ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. DateTime ํ˜•์‹์„ ๋ณด๋ฉด ์†์ƒํ•ด์„œ ์ด ๊ธ€์„ ์“ฐ๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ํ˜•์‹, Javascript ๋‚ ์งœ ๋ฐ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” Datetime NPM ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ISO 8601 ๋ฐ Unix ํƒ€์ž„์Šคํƒฌํ”„



ํšŒ์‚ฌ์—์„œ ์ผํ•˜๊ธฐ ์ „์— ์ด ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ํ˜•์‹์— ๋Œ€ํ•ด ์ผ์ฐ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ํ˜•์‹์„ ๋ณธ ๊ฒฝํ—˜์ด ์žˆ์—ˆ๊ณ  ๋„ˆ๋ฌด ํ˜ผ๋ž€ ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ์ด ๋‘˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

// ISO 8601
2022-03-29T12:04:06.179Z 
2022-03-29T12:04:06.179+07:00

// Unix Timestamp
1648555411546


ISO 8601





ISO 8601 ํ˜•์‹์˜ ๊ฒฝ์šฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒƒ์€ z ๋˜๋Š” +07:00 ์ธ ๋งˆ์ง€๋ง‰ ํ‘œ์‹œ๊ธฐ์ž…๋‹ˆ๋‹ค. z๋Š” Zulu ์‹œ๊ฐ„์„ ์˜๋ฏธํ•˜๋ฉฐ Zulu ์‹œ๊ฐ„์€ UTC(Universal Time Coordinated) ๋˜๋Š” GMT+0(Greenwich Mean Time Zone)๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.



์œ ๋‹‰์Šค ํƒ€์ž„์Šคํƒฌํ”„๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?



Unix ํƒ€์ž„์Šคํƒฌํ”„๋Š” ํ•ญ์ƒ UTC๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

Unix Timestamp์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ํ•œ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ์‚ฌ์‹ค์€ Unix Timestamp๊ฐ€ 2038๋…„ 1์›” 19์ผ ์˜ค์ „ 3:14 UTC์— ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์™œ์š”? Unix Timestamp ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์ „ํ†ต์ ์œผ๋กœ 32๋น„ํŠธ์ธ ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Unix ํƒ€์ž„์Šคํƒฌํ”„์— ์‹œ์ž‘ ์‹œ๊ฐ„์ด ์žˆ๋‹ค๊ณ  ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ ˆ๋Œ€์ ์œผ๋กœ ๋งž์Šต๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ 00:00:00 UTC์— ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Unix Epoch Time์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์žˆ๋‹ค๋ฉด Unix Timestamp์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Epochhere์˜ ์ •์˜์— ๋Œ€ํ•ด ์ฝ์–ด๋ณด์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์•„์ง ํƒœ์–ด๋‚˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ Unix Timestamp๊ฐ€ ์–ด๋–ป๊ฒŒ ๋๋‚˜๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. Unix ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š” :P.

๋˜ํ•œ ์ž‘์—…์— ๋„์›€์ด ๋˜๋Š” ์ด DateTime ๋ณ€ํ™˜๊ธฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. https://www.timestamp-converter.com/

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ ์งœ



์ด ์„น์…˜์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” Javascript Date ์„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ๋‚ด ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

new Date()


์ด๊ฒƒ์€ Date ์ƒ์„ฑ์ž์ด๋ฏ€๋กœ Date ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.



Date()
// "Thu Mar 31 2022 06:41:59 GMT-0400 (Eastern Daylight Time)"


๊ทธ๋Ÿฌ๋‚˜ Date๋ฅผ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋ฉด new Date().toString()์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.



Date.now()
// 1648723728520


Javascript์—์„œ Unix ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•˜๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ๋‹ต์ž…๋‹ˆ๋‹ค.

new Date().toISOString()
// "2022-03-31T10:52:47.427Z"


๋ฌผ๋ก  ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ISO ISO 8601์šฉ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— Z๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ Zulu ์‹œ๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ ์‹œ๊ฐ„๋Œ€๊ฐ€ ์•„๋‹Œ UTC์ž…๋‹ˆ๋‹ค(UTC ์‹œ๊ฐ„๋Œ€์— ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ).

๋‚ ์งœ NPM ํŒจํ‚ค์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ



์šฐ๋ฆฌ ํšŒ์‚ฌ์—์„œ ์„ธ ๊ฐœ์˜ npm ํŒจํ‚ค์ง€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค. 3๊ฐ€์ง€๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ถ”์ฒœํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ moment Moment.js , Day.js ๋ฐ date-fns ์ธ ์„ธ ๊ฐœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„ธ ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ฝ”๋“œ์—์„œ DateTime์„ ์กฐ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์„ธ ๊ฐ€์ง€ ์ค‘์—์„œ ์„ ํƒํ•˜๋Š” ๋ฐ ๋ช‡ ๊ฐ€์ง€ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Moment.js๋Š” ํ˜„์žฌ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธhere์— ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.



์ด์ œ Day.js์™€ date-fns ์‚ฌ์ด์— ์žˆ์Šต๋‹ˆ๋‹ค. Day.js์™€ date-fns ์‚ฌ์ด์— ์„ค๋ช…ํ•˜๋Š” ๊ธ€์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋‹ต์„ ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. https://how-to.dev/dayjs-vs-date-fns

์š”์•ฝํ•˜๋ฉด, ์œ„์˜ ๊ทธ์˜ ๋ธ”๋กœ๊ทธ์—์„œ Marcin Wosinek์— ๋”ฐ๋ฅด๋ฉด, ์ด๋ฏธ moment.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋Œ€๋ถ€๋ถ„์˜ API๊ฐ€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Day.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌ๊ธฐ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ date-fns๋Š” Day.js๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์ด ์—†์œผ๋ฉด date-fns๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ Date ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 



๋ฐ”๋ผ๊ฑด๋Œ€, ํƒ€์ž„ ์Šคํƒฌํ”„ ํ˜•์‹์„ ์ฝ๋Š” ๋ฐฉ๋ฒ•์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์‹œ๊ณ  ๋งˆ์Œ์— ๋“œ๋Š” DateTime ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์„ธ์š”.
์ฆ๊ฑฐ์šด ๋…์„œ ๐Ÿ“š!

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ