[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๊ฒฝ๊ณผ ์๊ฐ ํ์ / UTC / ISO 8601
Date ๊ฐ์ฒด ํบ์๋ณด๊ธฐ
์ ๋์ค ํ์์คํฌํ
์๋ฐ์คํฌ๋ฆฝํธ์์ Date ๊ฐ์ฒด๋ ์ ๋์ค ํ์์คํฌํ๋ฅผ ์ฌ์ฉํ๋ค.
SNS์ ๋ณด๋ฉด “1๋ถ ์ ๊ฒ์", “๋ฐฉ๊ธ ์ ๊ฒ์" ๊ฐ์ ๊ฒฝ๊ณผ์ผ๋ก ํฌ์คํ
๋ ์ง๋ฅผ ํ์ํ๋ ๊ฒ์ ์์ฃผ๋ณผ ์ ์๋ค. ๊ฒฝ๊ณผ์ผ์ Date ๊ฐ์ฒด์ getTime()
๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ณํํ ๋ฐ๋ฆฌ์ด์ ํ์ฌ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
getTime()
๋ฉ์๋๋ 1970๋
1์ 1์ผ 0์ 0 ๋ถ 0์ด(UTC)๋ถํฐ ํ์ฌ๊น์ง์ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ํ์ฐํ ๊ฐ์ ๋ฐํํ๋ค. ์ด๋ฅผ ์ ๋์ค ์๊ฐ(์ ๋์ค ํ์์คํฌํ)์ผ๋ก ๋ถ๋ฅธ๋ค. 1000๋ฐ๋ฆฌ์ด(millisecond)๋ 1์ด(second)๋ค.
const date = new Date();
console.log(date); // Tue Jun 15 2021 15:26:07 GMT+0900 (๋ํ๋ฏผ๊ตญ ํ์ค์)
date.getTime(); // 1623738367301
getTime()
์ผ๋ก ๊ฐ์ ธ์จ ๋ฐ๋ฆฌ์ด ์๊ฐ์ ์ ๋์ค ์๊ฐ ๊ณ์ฐ๊ธฐ๋ก ํ์ธํด๋ณด๋ฉด ๋์ผํ ๊ฒ์ ์ ์ ์๋ค.
์ ๋์ค ์๊ฐ ๊ณ์ฐ๊ธฐ ๊ฒฐ๊ณผ๊ฐ๊ณผ ๋์ผํ๋ค
new Date(1623738367301); // Tue Jun 15 2021 15:26:07 GMT+0900 (๋ํ๋ฏผ๊ตญ ํ์ค์)
ISO 8601
UTC๋ 1972๋ 1์ 1์ผ๋ถํฐ ์ํ๋ ๊ตญ์ ํ์ค์๋ค. UTC๋ GMT(๊ทธ๋ฆฌ๋์น ํ๊ท ์)์ ๊ธฐ๋ฐํด์ GMT๋ก๋ ๋ถ๋ฆฐ๋ค. GMT๋ ์๊ตญ ๋ฐ๋์ ๊ธฐ์ ์ผ๋ก, ๋ด์ง๋๋ ์ฐ๋งํด์ ์ข ์ ์ผ๋ก ์ค์ ํ ํ์ ์ธ๊ณ์์ ๊ธฐ์ค์๊ฐ๋๋ค. ex) ๋ฐ๋ GMT+0, ์์ธ GMT+9
Date ๊ฐ์ฒด์ toJSON()
toISOString()
๋ฉ์๋๋ฅผ ์ด์ฉํด YYYY-MM-DDTHH:mm:ss.sssZ
ํฌ๋งท์ ISO 8601 ๋ ์ง๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. ISO 8601์ ๊ตญ์ ํ์คํ๊ธฐ๊ตฌ์์ ์ง์ ํ ๋ ์ง/์๊ฐ์ ๋ํ ํ์ค ๊ท๊ฒฉ์ด๋ค. ๋ ์ง ๊ฐ์ฅ ๋ค์ ๋ถ๋ Z
๋ UTC ์๊ฐ๋๋ฅผ ๋ํ๋ธ๋ค(09:30 UTC
→ 0930Z
)
ISO 8601 ๋ ์ง ์ญ์ Date ํจ์์ ์ธ์๋ก ๋ฃ์ด์ ์ฌ์ฉํ ์ ์๋ค.
new Date().toJSON(); // '2021-06-18T06:48:16.046Z'
new Date().toISOString(); // '2021-06-18T06:48:16.046Z'
new Date("2021-06-18T06:48:16.046Z"); // Fri Jun 18 2021 15:48:16 GMT+0900 (ํ๊ตญ ํ์ค์)
๊ตญ์ ํ์ค ๋ ์ง ํ์์ ์ซ์๋ก ๋ ์ง๋ฅผ ํํํ ๋ ๋ชจํธํจ์ด ์๋๋ก ํ๊ธฐ ์ํ ํ์ค ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ถ๋ฏธ์์๋ ๋ณดํต ์์ ๋ ์ง ์์ ์ด๋ค. ๊ทธ๋ฌ๋, ์ ๋ฝ์ฌ๋๋ค์ ์ ์์ ๋ ์ง๋ฅผ ์ฐ๋๋ฐ, 1998๋ 3์ 30์ผ์ 0.3.1998๊ณผ ๊ฐ์ด ํํํ๋ค.
์ซ์ ์ฌ์ด๋ฅผ ๊ตฌ๋ถํ๋ ๊ตฌ๋ถ์๋ค๋ ๋๋ผ๋ง๋ค ๋ชจ๋ ๋ค๋ฅด๋ค. ๊ทธ ์ธ์๋ ์๊ธฐ 1๋ 1์ 1์ผ ์ด์ ์๋์ ๋ ์ง๋ ์ซ์๋ก ์ด๋ป๊ฒ ํํํ๋๊ฐ, ์ฆ B.C. ๋ ์ง๋ค์ ํํ์ ๊ดํ ๋ฌธ์ ๊ฐ ๋จ๊ฒ๋๋ค. ISO 8601์ ๋๋ผ์ ๋ฌด๊ดํ๊ฒ ๋ ์ง ํ๊ธฐ ํ์์ ํ์ค ๋ฐฉ์์ ์ ๊ณตํ๋ค.
- ์ฐ, ์, ์ผ์์ผ๋ก ํ๊ธฐํ๋ค.
- ๊ฐ ์ซ์ ์ฌ์ด๋ ํ์ดํ `-` ์ผ๋ก ๊ตฌ๋ถํ๋ค.
- 10 ๋ฏธ๋ง์ ์ซ์์๋ ์์ `0`์ ๋ถ์ธ๋ค.
- ์๊ธฐ 1 ๋ ์ ์์ ํด๋ "0" ๋ ์ผ๋ก ํํํ๊ณ , 0 ๋ ์ ์์ ํด๋ "-1" ๋ ๋ฑ์ผ๋ก ํํํ๋ค.
์ถ์ฒ - Terms
๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐ ํจ์
๋น๊ตํ ์๊ฐ์ Date ๊ฐ์ฒด๋ฅผ ๋ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋ณ๊ฒฝํ ํ, ํ์ฌ ์๊ฐ์ ๋ฐ๋ฆฌ์ด๋ฅผ ๋นผ๋ฉด ๋ ์๊ฐ ์ฌ์ด์ ๊ฒฝ๊ณผ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ์ ์ ์๋ค. ์ฌ๊ธฐ์ 1000์ ๋๋๋ฉด ์ด ๋จ์๋ก ๋ณผ ์ ์๋ค. ๋ถ ๋จ์๋ ์ถ๊ฐ๋ก 60์ ๋๋๋ฉด ๋๊ณ , ์๊ฐ ๋จ์๋ 60์ ํ ๋ฒ๋ ๋๋๋ฉด ๋๋ค. (์ฐธ๊ณ ๋งํฌ)
const getElapsedTime = (date) => {
const now = new Date().getTime();
const commentDate = date.getTime();
const elapsedMSec = now - commentDate;
const elapsedSec = elapsedMSec / 1000; // "์ด" ๋จ์ ๊ฒฝ๊ณผ ์๊ฐ
const elapsedMin = elapsedMSec / 1000 / 60; // "๋ถ" ๋จ์ ๊ฒฝ๊ณผ ์๊ฐ
const elapsedHour = elapsedMSec / 1000 / 60 / 60; // "์๊ฐ" ๋จ์ ๊ฒฝ๊ณผ ์๊ฐ
return { elapsedMSec, elapsedSec, elapsedMin, elapsedHour };
};
๊ฒฝ๊ณผ ์๊ฐ ๋ฉ์์ง ๋ฐํ ํจ์
๊ฒฝ๊ณผ ์๊ฐ์ ๊ณ์ฐํ์ผ๋, ๊ฒฝ๊ณผ ์๊ฐ์ ๋ํ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ํจ์๊ฐ ํ์ํ๋ค. ์ด ๋จ์๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฒ์ฌํ ์ ์๋๋ก ์ด → ๋ถ → ์๊ฐ ์์๋๋ก if๋ฌธ ์กฐ๊ฑด์ ๊ฑฐ๋๊ฒ ์ค์ํ๋ค. ๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก Date ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค(ํจ์๋ฅผ ํ ๋ฒ๋ง ํธ์ถํด๋ ๊ฒฝ๊ณผ ์๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐ์์ฌ ์ ์๋๋ก ํ๊ธฐ ์ํด).
- 60์ด ๋ฏธ๋ง๊น์ง๋ ์ด ๋จ์๋ก ํ์ ex) 59์ด ์ ๊ฒ์
- 11์ด ๋ฏธ๋ง์ '๋ฐฉ๊ธ ์ ๊ฒ์'๋ก ํ์
- 11์ด ๋ถํด '~์ด ์ ๊ฒ์'๋ก ํ์
- 60๋ถ ๋ฏธ๋ง๊น์ง๋ ๋ถ ๋จ์๋ก ํ์ ex) 59๋ถ ์ ๊ฒ์
- 24์๊ฐ ๋ฏธ๋ง๊น์ง๋ ์๊ฐ ๋จ์๋ก ํ์ ex) 23์๊ฐ ์ ๊ฒ์
- ๊ทธ ์ธ์ ์ผ๋ฐ์ ์ธ ์๊ฐ ํ์์ผ๋ก ํ์ ex) 2021-02-10 12:10:19
const getElapsedTimeMsg = (date) => {
const { elapsedSec, elapsedMin, elapsedHour } = getElapsedTime(date);
if (elapsedSec < 60) {
const sec = Math.floor(elapsedSec);
return sec < 11 ? `๋ฐฉ๊ธ ์ ๊ฒ์` : `${sec}์ด ์ ๊ฒ์`;
}
if (elapsedMin < 60) return `${Math.floor(elapsedMin)}๋ถ ์ ๊ฒ์`;
if (elapsedHour < 24) return `${Math.floor(elapsedHour)}์๊ฐ ์ ๊ฒ์`;
return getFormattedDate(date); // 2021-02-10 12:10:19
};
const padLeft = (date) => (date < 10 ? `0${date}` : `${date}`);
const getFormattedDate = (date) => {
const YYYY = date.getFullYear();
const MM = padLeft(date.getMonth() + 1); // getMonth๋ 0~11 ๊ฐ์ ๋ฐํํ๋ค
const DD = padLeft(date.getDate());
const hh = padLeft(date.getHours());
const mm = padLeft(date.getMinutes());
const ss = padLeft(date.getSeconds());
return `${YYYY}-${MM}-${DD} ${hh}:${mm}:${ss}`;
};
- `getMonth` ๋ฉ์๋๋ 0(1์)~11(12์) ์ฌ์ด์ ๊ฐ์ ๋ฐํํ๋ค
- `getDay()` ๋ฉ์๋๋ก ์์ผ์ ํ์ธํ ์๋ ์๋ค. 0(์ผ์์ผ)~6(ํ ์์ผ) ์ฌ์ด์ ๊ฐ์ ๋ฐํํ๋ค
- Date ๊ฐ์ฒด์ ๋ชจ๋ ๋ฉ์๋๋ `set`์ ์ง์ํ๋ค. ์ด๋ฅผ ์ด์ฉํด ๊ฐ์ ๋ณด์ ํ ์๋ ์๋ค.
const today = new Date("2022-02-02"); // Wed Feb 02 2022 09:00:00 GMT+0900 (ํ๊ตญ ํ์ค์)
const yesterday = new Date(today); // Wed Feb 02 2022 09:00:00 GMT+0900 (ํ๊ตญ ํ์ค์)
yesterday.setDate(today.getDate() - 1); // 1643673600000
console.log(today.toLocaleDateString()); // 2022. 2. 2.
console.log(yesterday.toLocaleDateString()); // 2022. 2. 2.
๋ ํผ๋ฐ์ค
- [Javascript] ๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐํ๊ธฐ (์๊ฐ, ๋ถ, ์ด)
- ์ฝ๋ฉ๊ต์ก ํฐ์จํผ์ค์ฟจ
- Date.prototype.getTime() - JavaScript | MDN
- Javascript ์ Date ๋ ์ง
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ์์ ์ ๋ ฅ์ฐฝ ์๋ํ๋ ๋ฐฉ์ง
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ์์ ์ ๋ ฅ์ฐฝ ์๋ํ๋ ๋ฐฉ์ง
2024.04.25 -
[HTML/CSS] ์ค๋ฐ๊ฟ(๊ฐํ๋ฌธ์) ํ์ / ๋์น๋ ํ ์คํธ ์๋ต ๊ธฐํธ ํ์ ๋ฐฉ๋ฒ
[HTML/CSS] ์ค๋ฐ๊ฟ(๊ฐํ๋ฌธ์) ํ์ / ๋์น๋ ํ ์คํธ ์๋ต ๊ธฐํธ ํ์ ๋ฐฉ๋ฒ
2024.04.25 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ค ์ซ์, ๋ฐ์ดํฐ ์์ฑ ์์
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ค ์ซ์, ๋ฐ์ดํฐ ์์ฑ ์์
2024.04.25 -
[JS] ์บ๋ฒ์ค Canvas ๋ํ ํ๋ ์ถ์ ํ ์์ ์กฐ์ ํ๊ธฐ
[JS] ์บ๋ฒ์ค Canvas ๋ํ ํ๋ ์ถ์ ํ ์์ ์กฐ์ ํ๊ธฐ
2024.04.24