๐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ ์ง/์๊ฐ ๐
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 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต์ ํด ์ฃผ์ธ์.
์ฆ๊ฑฐ์ด ๋ ์ ๐!
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ ์ง/์๊ฐ ๐ ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/raaynaldo/javascript-datetime-111eํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค