Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Project
- Next.js
- babel.config.js
- img upload
- error
- 리액트 네이티브
- Access Key 생성
- AWS Access Key
- aws bucket 정책
- firebase 라이브러리
- 문자열 대소문자 구별
- 리엑트 네이티브 아이콘
- 리액트
- GIT
- fire base
- s3 upload
- react native 개발
- 문자열 대소문자
- AWS
- PongWorld
- react native font
- 백준
- react native 세팅
- 에러
- React
- react native picker
- react native CLI
- js
- 리액트 네이티브 에러
- react native
Archives
- Today
- Total
밝을희 클태
[ JavaScript ] Date 정복하기 본문
Node.js !== Browser
보통 서버에 데이터를 저장할 때 createdAt: new Date()와 같이 생성 시간을 지정한다.
그런데 클라이언트에서 특정 기간 내에 생성된 데이터를 서버에서 조회할 때 예상치 못한 문제가 발생할 수 있다.
브라우저와 서버의 new Date() 출력 차이
// 브라우저
// Sun Feb 16 2025 22:58:26 GMT+0900 (한국 표준시)
console.log(new Date())
// node.js
// 2025-02-16T13:58:26.381Z
console.log(new Date())
위와 같이 서버(node.js) 클라이언트(브라우저)는 각각 다른 형태의 Date를 출력한다.
이는 서버는 서버의 타임존을 기반으로 생성을 하고, 브라우저는 사용자의 로컬 타임존을 따른다.
- 브라우저 → new Date()는 사용자의 로컬 타임존 (KST, UTC+9)을 따름, 사람이 읽기 쉬운 형식으로 표현
- 서버(Node.js) → new Date()는 기본적으로 UTC (GMT+0) 기준으로 생성됨
브라우저와 서버의 Date 동기화하기
서버와 클라이언트 간 날짜를 일관되게 유지하려면 toISOString()을 활용하면 된다.
브라우저에서도 toISOString()을 사용하면 Node.js와 동일한 UTC 시간으로 변환됨.
// 브라우저
// 2025-02-16T13:58:26.381Z
console.log(new Date().toISOString())
// node.js
// 2025-02-16T13:58:26.381Z
console.log(new Date())
날짜 바꾸기
setDate() 사용
const today = new Date();
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
console.log(today); // Sun Feb 16 2025 23:21:20 GMT+0900 (한국 표준시)
console.log(tomorrow); // Mon Feb 17 2025 23:21:20 GMT+0900 (한국 표준시)
date-fns 라이브러리
import { addDays } from "date-fns";
const today = new Date();
const tomorrow = addDays(today, 1);
const dayAfterTomorrow = addDays(today, 2);
console.log(tomorrow); // Mon Feb 16 2025 23:21:20 GMT+0900 (한국 표준시)
console.log(dayAfterTomorrow); // Tue Feb 17 2025 23:21:20 GMT+0900 (한국 표준시)
다양한 Date 객체 생성
console.log(new Date()); // 현재 날짜 & 시간 (로컬 타임존)
console.log(new Date().toISOString()); // UTC 기준의 ISO 8601 형식
console.log(new Date("2025-02-16")); // 특정 날짜 생성 (시간은 00:00:00)
console.log(new Date(2025, 1, 16)); // 2025년 2월 16일 (⚠️ Month는 0부터 시작!)
console.log(new Date(2025, 1, 16, 14, 30, 0)); // 2025-02-16 14:30:00 생성
console.log(new Date(1744672800000)); // UNIX 타임스탬프 (밀리초 단위)
특정 날짜에서 원하는 값 추출하기
const now = new Date();
console.log(now.getFullYear()); // 연도 (ex. 2025)
console.log(now.getMonth() + 1); // 월 (⚠️ 0부터 시작하므로 +1 필요)
console.log(now.getDate()); // 일 (1~31)
console.log(now.getDay()); // 요일 (0: 일요일, 1: 월요일 ...)
console.log(now.getHours()); // 시간 (0~23)
console.log(now.getMinutes()); // 분 (0~59)
console.log(now.getSeconds()); // 초 (0~59)
출력 형식 변경
다양한 방법이 있지만 제일 쉽고 깔끔한 date-fns 라이브러리 추천
const date1 = new Date();
console.log(format(date1, 'yyyy년MM월dd일 HH시mm분ss초')); // 2025년02월16일 23시37분30초
console.log(format(date1, 'yyyy.MM.dd HH.mm.ss')); // 2025.02.16 23.37.30
console.log(format(date1, 'yyyy년MM월dd일')); // 2025년02월16일
'JavaScript' 카테고리의 다른 글
콜백 지옥이란 그리고 해결법 (0) | 2024.10.30 |
---|---|
[ JavaScript ]자바스크립트는 싱글 스레드인데 어떻게 멀티 스레드처럼 동작을 할까? (3) | 2024.08.28 |
[ JS ] searchParams 다루기 (0) | 2024.07.06 |
[ JavaScript / TypeScript ] Debounce 함수 구현 (0) | 2024.05.12 |
[ JavaScript ] 렉시컬 스코프(Lexical Scope)와 렉시컬 환경(Lexical Environment) (0) | 2024.05.11 |