logo

DowanKim

36. Date

2026λ…„ 4μ›” 14일

μžλ°”μŠ€ν¬λ¦½νŠΈ

πŸ—οΈ 1. Date 객체 μƒμ„±ν•˜κΈ°

λ‚ μ§œλ₯Ό λ§Œλ“œλŠ” 방법은 크게 λ„€ κ°€μ§€μž…λ‹ˆλ‹€.

  • new Date(): 호좜 μ§ν›„μ˜ ν˜„μž¬ μ‹œκ°μ„ 담은 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • new Date(milliseconds): 1970λ…„ 1μ›” 1일(UTC+0) κΈ°μ€€, 인자둜 받은 λ°€λ¦¬μ΄ˆλ§ŒνΌ 흐λ₯Έ μ‹œμ μ„ μƒμ„±ν•©λ‹ˆλ‹€. μ΄λ•Œμ˜ 숫자λ₯Ό νƒ€μž„μŠ€νƒ¬ν”„λΌκ³  ν•©λ‹ˆλ‹€.
  • new Date(dateString): νŠΉμ • ν˜•μ‹μ˜ λ¬Έμžμ—΄μ„ 읽어 λ‚ μ§œλ₯Ό λ§Œλ“­λ‹ˆλ‹€. (λ‚΄λΆ€μ μœΌλ‘œ Date.parse μ‚¬μš©)
  • new Date(year, month, date, ...): 각 ꡬ성 μš”μ†Œλ₯Ό 숫자둜 λ„£μ–΄ μƒμ„±ν•©λ‹ˆλ‹€.
    • 주의: monthλŠ” 0(1μ›”)λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€! 2월을 λ§Œλ“€λ €λ©΄ 1을 λ„£μ–΄μ•Ό ν•˜μ£ .

πŸ” 2. λ‚ μ§œ κ΅¬μ„±μš”μ†Œ μ–»κΈ° 및 μ„€μ •ν•˜κΈ°

객체에 μ €μž₯된 νŠΉμ • 정보λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜ μˆ˜μ •ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

μ£Όμš” Getter (κ°’ μ–»κΈ°)

  • getFullYear(): 4자리 연도 (98이 μ•„λ‹Œ 2026)
  • getMonth(): μ›” (0~11)
  • getDate(): 일 (1~31)
  • getDay(): μš”μΌ (0: μΌμš”μΌ ~ 6: ν† μš”μΌ)
  • getTime(): νƒ€μž„μŠ€νƒ¬ν”„ (λ°€λ¦¬μ΄ˆ λ‹¨μœ„ 숫자)

πŸ’‘ UTC κΈ°μ€€: λͺ¨λ“  λ©”μ„œλ“œλͺ… 쀑간에 UTCλ₯Ό λ„£μœΌλ©΄(예: getUTCHours()) ν˜„μ§€ μ‹œκ°„λŒ€κ°€ μ•„λ‹Œ ν‘œμ€€μ‹œ(UTC+0) κΈ°μ€€μ˜ 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” Setter (κ°’ μˆ˜μ •)

  • setFullYear(year, [month], [date])
  • setMonth(month, [date])
  • setDate(date)

πŸͺ„ 3. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ§ˆλ²•: μžλ™ κ³ μΉ¨ (Autocorrection)

Date κ°μ²΄λŠ” λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λŠ” 값이 μž…λ ₯되면 μ•Œμ•„μ„œ λ‹€μŒ λ‚ μ§œλ‘œ λ„˜κ²¨μ£ΌλŠ” λ˜‘λ˜‘ν•œ κΈ°λŠ₯을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: new Date(2026, 0, 32) $\rightarrow$ 1μ›” 32일은 μ—†μœΌλ―€λ‘œ μžλ™μœΌλ‘œ 2026λ…„ 2μ›” 1일이 λ©λ‹ˆλ‹€.
  • ν™œμš©: "μ˜€λŠ˜λΆ€ν„° 100일 ν›„"λ₯Ό κ΅¬ν•˜κ³  μ‹Άλ‹€λ©΄ λ‹¨μˆœνžˆ date.setDate(date.getDate() + 100)만 ν•˜λ©΄ λ©λ‹ˆλ‹€. 월이 λ„˜μ–΄κ°€λŠ” 계산은 엔진이 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

⏱️ 4. μ‹œκ°„ 차이 μΈ‘μ •κ³Ό μ„±λŠ₯

λ‚ μ§œ μ—°μ‚°

Date 객체끼리 λΉΌκΈ° μ—°μ‚°(-)을 ν•˜λ©΄ κ²°κ³ΌλŠ” λ°€λ¦¬μ΄ˆ(ms) λ‹¨μœ„μ˜ 숫자둜 λ°˜ν™˜λ©λ‹ˆλ‹€.

Date.now()

ν˜„μž¬ μ‹œκ°μ˜ νƒ€μž„μŠ€νƒ¬ν”„λ§Œ ν•„μš”ν•˜λ‹€λ©΄ new Date().getTime()보닀 **Date.now()**κ°€ 더 μ’‹μŠ΅λ‹ˆλ‹€. 쀑간에 객체λ₯Ό μƒμ„±ν•˜λŠ” 과정을 μƒλž΅ν•˜κΈ° λ•Œλ¬Έμ— 더 λΉ λ₯΄κ³  λ©”λͺ¨λ¦¬ νš¨μœ¨μ μž…λ‹ˆλ‹€.

λ²€μΉ˜λ§ˆν‚Ή μ£Όμ˜μ‚¬ν•­

μ„±λŠ₯을 μΈ‘μ •ν•  λ•ŒλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ μ΅œμ ν™”(Hot Code) μ‹œκ°„μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ •ν™•ν•œ 츑정을 μœ„ν•΄ **μ—¬λŸ¬ 번 반볡 μ‹€ν–‰(Heat-up)**ν•œ λ’€ 평균값을 κ΅¬ν•˜λŠ” 것이 μ •μ„μž…λ‹ˆλ‹€.


πŸŽ™οΈ 기술 λ©΄μ ‘ λŒ€λΉ„ (Interview Questions)

Q1. μžλ°”μŠ€ν¬λ¦½νŠΈ Date κ°μ²΄μ—μ„œ 1μ›”κ³Ό μΌμš”μΌμ€ 각각 μ–΄λ–€ 숫자둜 ν‘œν˜„λ˜λ‚˜μš”? (기초)

λ‹΅λ³€: **1월은 숫자 0**으둜 ν‘œν˜„λ©λ‹ˆλ‹€(getMonth()). 반면 **μΌμš”μΌμ€ μš”μΌ λ©”μ„œλ“œ(getDay())μ—μ„œ 숫자 0**으둜 ν‘œν˜„λ©λ‹ˆλ‹€. 월은 0λΆ€ν„° μ‹œμž‘ν•˜μ§€λ§Œ, 일(Date)은 1λΆ€ν„° μ‹œμž‘ν•œλ‹€λŠ” 차이점을 λͺ…ν™•νžˆ 인지해야 ν•©λ‹ˆλ‹€.

Q2. new Date().getTime()κ³Ό Date.now()의 차이점은 λ¬΄μ—‡μΈκ°€μš”? (쀑급)

λ‹΅λ³€: 두 λ©”μ„œλ“œ λͺ¨λ‘ 1970λ…„ 1μ›” 1일 μ΄ν›„μ˜ λ°€λ¦¬μ΄ˆλ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” 점은 κ°™μ§€λ§Œ, Date.now()λŠ” λ³„λ„μ˜ Date 객체λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜μ§€ μ•Šκ³  μ •μˆ˜κ°’μ„ 직접 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ”°λΌμ„œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ 뢀담을 쀄여주며 μ„±λŠ₯ λ©΄μ—μ„œ 더 μœ λ¦¬ν•©λ‹ˆλ‹€.

Q3. "2026λ…„ 2μ›”μ˜ λ§ˆμ§€λ§‰ λ‚ "을 κ΅¬ν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ λ‘œμ§μ€ λ¬΄μ—‡μΈκ°€μš”? (심화)

λ‹΅λ³€: new Date(2026, 2, 0).getDate()λ₯Ό ν˜ΈμΆœν•˜λ©΄ λ©λ‹ˆλ‹€. 3μ›”(month: 2)의 0일(date: 0)을 μƒμ„±ν•˜λ„λ‘ ν•˜λ©΄, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μžλ™ κ³ μΉ¨ κΈ°λŠ₯에 μ˜ν•΄ 이전 달(2μ›”)의 λ§ˆμ§€λ§‰ λ‚ λ‘œ μ„€μ •λ©λ‹ˆλ‹€.


πŸ’‘ Tech Lead의 ν•œ 쀄 μΈμ‚¬μ΄νŠΈ

μ›Ή μ•±μ—μ„œ μ„œλ²„μ™€ 톡신할 λ•Œ λ‚ μ§œλŠ” 보톡 **ISO 8601 ν˜•μ‹(YYYY-MM-DDTHH:mm:ssZ)**μ΄λ‚˜ νƒ€μž„μŠ€νƒ¬ν”„λ‘œ μ£Όκ³ λ°›λŠ” 것이 κ°€μž₯ μ•ˆμ „ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ new Date()둜 좜λ ₯ν•  λ•ŒλŠ” 항상 μ‚¬μš©μžμ˜ 둜컬 ν™˜κ²½(timezone)이 λ°˜μ˜λœλ‹€λŠ” 점을 μžŠμ§€ λ§ˆμ„Έμš”!