๋ฐ˜์‘ํ˜•

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 UTC0930Z)

 

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.

 

๋ ˆํผ๋Ÿฐ์Šค


 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•