📌 Moment.js란?
- JavaScript 날짜 및 시간을 쉽게 다룰 수 있게 해주는 라이브러리
- 기존의 Date 객체와 다르게 간결하고 다양한 포맷 지원, 날짜 계산까지 쉽게 해결할 수 있습니다
📍moment CDN, 설치(React, Vue)
// CDN
<script src="https://cdn.jsdelivr.net/npm/moment@2.29.4/min/moment.min.js"></script>
// React, Vue
npm install moment
📍 moment 기능
📂 분류 | 🧩 기능 | 💻 예시 코드 | 📌 설명 |
기본 | 현재 날짜/시간 | moment() | 현재 시각을 Moment 객체로 가져옴 |
특정 날짜 생성 | moment('2025-05-15') | 지정된 날짜를 Moment 객체로 생성 | |
포맷팅 | 기본 포맷 | moment().format('YYYY-MM-DD') | 'YYYY-MM-DD' 형식으로 날짜 출력 |
시간 포함 포맷 | moment().format('YYYY-MM-DD HH:mm:ss') | 시간까지 포함해 출력 | |
로컬 포맷 | moment().format('YYYY년 MM월 DD일') | 지역화된 날짜 형식 출력 | |
요일 출력 | moment().format('dddd') | 요일명 출력 (예: '월요일') | |
시간대 표시 | moment().format('A h:mm') | 오전/오후 및 시간 출력 (예: '오후 3:30') | |
날짜 비교 | 이전 날짜 확인 | moment().isBefore('2025-06-28') | 특정 날짜보다 이전인지 확인 |
이후 날짜 확인 | moment().isAfter('2023-01-01') | 특정 날짜보다 이후인지 확인 | |
동일 날짜 확인 | moment().isSame('2025-04-10') | 특정 날짜와 같은지 확인 | |
범위 내 확인 | moment().isBetween('2025-01-01', '2025-12-31') | 두 날짜 사이인지 확인 | |
날짜 계산 | 날짜 더하기 | moment().add(7, 'days') | 7일 뒤 날짜 계산 |
날짜 빼기 | moment().subtract(3, 'months') | 3개월 전 날짜 계산 | |
차이 계산 | moment('2025-12-25').diff(moment('2025-01-01'), 'days') | 일(day) 기준 차이 계산 | |
시작/끝 설정 | moment().startOf('month') | 월의 시작 날짜 설정 | |
날짜 검증 | 유효 날짜 확인 | moment('2025-02-30').isValid() | 날짜 유효성 검증 (false) |
날짜 속성 | 월 획득 | moment().month() | 현재 월 정보 (0~11) |
날짜 설정 | moment().set('year', 2026) | 특정 속성(year 등) 설정 | |
국제화 | 언어 설정 | moment.locale('ko') | 한국어 로케일 설정 |
상대 시간 | 상대 표현 | moment('2025-01-01').fromNow() | 현재 기준 상대 시간 (예: ‘3개월 전’) |
달력 시간 | 맥락 표현 | moment('2025-04-15').calendar() | '내일 오후 3:30' 식 표현 |
기타 | 날짜 파싱 | moment('04/10/2025', 'MM/DD/YYYY') | 포맷 지정해서 날짜 문자열 파싱 |
클론 생성 | moment().clone() | 현재 객체 복사 | |
UTC 시간 | moment.utc() | UTC 기준 시간 사용 | |
타임존 변환 | moment().tz('America/New_York') | 타임존 변환 (※ moment-timezone 필요) |
반응형
📍 사용
const dateNow = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(dateNow); // 2025-04-10 11:00:39
// 날짜 비교
const test1 = moment('2025-1-1');
const test2 = moment('2025-12-31');
const test3 = moment('2026-1-1')
// isBefore : 특정 날짜보다 이전
test1.isBefore(test2) // true
moment().isBefore('2025-4-31') // true
moment('2026-1-1').isBefore('2025-4-31') // false
// isAfter : 특정 날짜보다 이후
test2.isAfter(test1) //true
moment().isAfter('2025-4-31') // false
moment('2026-1-1').isAfter('2025-4-31') // true
// isSame: 특정 날짜와 같은지
test1.isSame(test1) // true
moment().isSame('2025-4-31') // false
moment('2026-1-1').isSame('2026-1-1') // true
// isBetween : 두 날짜 사이인지
moment().isBetween('2025-01-01', '2025-12-31') // true
moment().isBetween('2026-01-01', '2026-12-31') // false
// 시간 포함 현재 시간 11:16분 기준
moment().isBetween('2025-04-10 10:00:00', '2025-04-10 11:00:00') // false
moment().isBetween('2025-04-10 10:00:00', '2025-04-10 11:20:00') // true
📍 날짜 더하기
// 날짜 더하기
moment().add(7, 'days').format('YYYY-MM-DD'); // q {_isAMomentObject: true, _isUTC: false, _pf: {…}, _locale: K, _d: Thu Apr 17 2025 11:20:52 GMT+0900 (한국 표준시), …}
moment().add(2, 'months'); // 동일
// 🔽 아래와 같이 포멧
moment().add(7, 'days').format('YYYY-MM-DD'); // 2025-04-17
moment().add(2, 'months').format('YYYY-MM-DD'); // 2025-06-10
📍 기간 계산 days, months,
- d-day 계산
// 일
const startDay = moment().diff(moment('2025-01-01'), 'days');
const endDay = moment().diff(moment('2025-12-01'), 'days');
console.log(startDay) // 99
console.log(endDay) // -234
// 월
const startMonths = moment().diff(moment('2025-01-10'), 'months');
console.log(startMonths) // 3
const endMonths = moment('2025-01-01').diff(moment('2025-12-01'), 'months');
console.log(endMonths) // -11
// 연
const yearYears = moment().diff(moment('2050-01-01'), 'years');
console.log(yearYears); // -24
const endYears = moment().diff(moment('2000-01-01'), 'years');
console.log(endYears); // 25
📍 특정 날짜와 날짜 시간
// 25/04/10/11:00 기준
const endDate1 = moment().isBefore(moment('2025-06-28 23:59', 'YYYY-MM-DD HH:mm')) // true
const endDate2 = moment().isBefore(moment('2025-04-10 10:59', 'YYYY-MM-DD HH:mm')) // false
console.log(endDate1)
console.log(endDate2)
📖 포맷 참고
'YYYY-MM-DD' | 2025-04-10 |
'YYYY-MM-DD HH:mm:ss' | 2025-04-10 13:20:45 |
'dddd' | 목요일 (요일) |
'YYYY년 M월 D일' | 2025년 4월 10일 (로컬 형식) |
📍 시간 사용하기
moment().format('HH:mm'); // → 13:32
moment().format('hh:mm A'); // → 01:32 PM
moment().locale('ko').format('A h:mm'); // → PM 1:32
moment().format('HH시 mm분'); // → 13시 32분
🌟
moment().locale('ko').format('A h:mm'); // → PM 1:32
// PM을 한글로 자동 표현되게 사용하기 위해선 CDN 아래와 같이 변경
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment-with-locales.min.js"></script>
moment().locale('ko').format('A h:mm'); // 오후 1:35
// React, vue
import 'moment/locale/ko';
📍 시간 기준 정하기
// ✅ 참고 { hour: 0, minute: 0, second: 0, millisecond: 0 }
// 10시
const endTime1 = moment().set({ hour: 10, minute: 0 });
moment().isBefore(endTime1) // false
// 15시 30분
const endTime2 = moment().set({ hour: 15, minute: 30 });
moment().isBefore(endTime2) // true
// 자정(00:00)
const endTime13 = moment().startOf('day');
moment().isBefore(endTime13) // false
※ moment().set(); //👈 오늘 날짜 기준으로 하기에 날짜가 다른 경우 false
📖 시간만 포맷 참고
'HH:mm' | 14:30 | 24시간제 (시:분) |
'HH:mm:ss' | 14:30:15 | 24시간제 (시:분:초) |
'hh:mm A' | 02:30 PM | 12시간제 + 오전/오후 표시 |
'h:mm A' | 2:30 PM | 12시간제 (0 안 붙음) |
'A h:mm' | 오후 2:30 | 로케일에 따른 오전/오후 표시 (locale이 ko일 경우) |
'mm:ss' | 05:12 | 분:초 (예: 타이머처럼) |
'HH시 mm분' | 14시 30분 | 한글 표기 |
'a h시 m분' | 오후 2시 30분 | 오전/오후 포함 한글 |
📍 moment-timezone
- moment.js 확장 기능으로 전 세계의 다양한 시간대를 처리할 수 있도록 도와주는 라이브러리
- 특정 지역의 현재 시간 구하기
- 시간대가 다른 사용자에게 정확한 시간 정보 제공
- 나라별 예약, 이벤트 등에 타임존 시간 사용
// CDN 로케일 + 타임존 포함
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.43/moment-timezone-with-data.min.js"></script>
--------------------------------------------
// React, Vue 타임존 추가!
npm install moment-timezone
// 한번에 설치
npm install moment moment-timezone
import moment from 'moment-timezone';
import 'moment/locale/ko';
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.43/moment-timezone-with-data.min.js"></script>
<script>
const ko = moment().tz('Asia/Seoul').format('YYYY년 M월 D일 A h:mm');
const ny = moment().tz('America/New_York').format('YYYY-MM-DD HH:mm');
const tyo = moment().tz('Asia/Tokyo').format('YYYY-MM-DD HH:mm');
console.log('서울 시간:', ko); // 서울 시간: 2025년 4월 10일 PM 2:39
console.log('뉴욕 시간:', ny); // 뉴욕 시간: 2025-04-10 01:39
console.log('도쿄 시간:', tyo); // 도쿄 시간: 2025-04-10 14:41
</script>
✍️ 기록
감사합니다. 😁
반응형
'✍️ 기록 > Javascript' 카테고리의 다른 글
[highlight.js] 구문 강조, 번호 추가, navigator.clipboard 복사 (0) | 2025.05.07 |
---|---|
[JavaScript] 전체 글자, 첫글자 대소문자 변경 (0) | 2025.04.02 |
[JavaScript] forEach, map, flatMap, filter, find, findIndex, reduce, reduceRight, some, every 배열 메서드 (1) | 2025.03.26 |
[JavaScript] for, for...in, for...of, while, do...while, 반복문 (1) | 2025.03.26 |
[JavaScript] 변수(Variable), 스코프(Scope), 식별자(Identifier) (0) | 2019.09.24 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.