[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