n8n 날짜 표현식 고급편 : 복잡한 시간 계산 마스터
목차
"2026-04-05" 문자열이 날짜로 인식이 안 됩니다. 어떻게 할까요?
DateTime.fromISO($json.date) — 이 한 줄이면 진짜 날짜 객체가 됩니다.
이 글을 다 읽으면 문자열 파싱, 시간대 변환, 날짜 비교를 자유롭게 다룰 수 있습니다.
① n8n 날짜 파싱 — 문자열을 진짜 날짜로
외부 API나 DB에서 받은 날짜 문자열을 Luxon DateTime으로 변환해야 합니다.
DateTime.fromISO()
// ISO 형식 문자열 → DateTime
{{ DateTime.fromISO($json.createdAt) }}
// 바로 포맷 변환
{{ DateTime.fromISO($json.createdAt).toFormat('yyyy년 MM월 dd일') }}
DateTime.fromFormat()
// 커스텀 형식 문자열 → DateTime
// "04/05/2026" 형식
{{ DateTime.fromFormat($json.date, 'MM/dd/yyyy') }}
// "2026년 04월 05일" 형식
{{ DateTime.fromFormat($json.date, 'yyyy년 MM월 dd일') }}
💡 파싱 예시
| 입력 | 포맷 |
|---|---|
| "2026-04-05" | fromISO() 사용 |
| "04/05/2026" | fromFormat(..., 'MM/dd/yyyy') |
| "April 5, 2026" | fromFormat(..., 'MMMM d, yyyy') |
② n8n Luxon 고급 계산 — 이번 달 1일, 마지막 날
시작/끝 구하기
// 이번 주 월요일
{{ $now.startOf('week').toFormat('yyyy-MM-dd') }}
// 이번 달 마지막 날
{{ $now.endOf('month').toFormat('yyyy-MM-dd') }}
// 올해 첫날
{{ $now.startOf('year').toFormat('yyyy-MM-dd') }}
// 작년 마지막 날
{{ $now.minus({years: 1}).endOf('year').toFormat('yyyy-MM-dd') }}
특정 값 설정하기
// 특정 시간으로 설정
{{ $now.set({hour: 9, minute: 0, second: 0}).toISO() }}
// 다음 달 15일 설정
{{ $now.plus({months: 1}).set({day: 15}).toFormat('yyyy-MM-dd') }}
③ n8n 시간대 변환 — UTC에서 KST로
🎭 왜왜씨와 딱딱씨의 대화
🤔
왜왜씨
시간대가 왜 중요한가요?
🎯
딱딱씨
서버는 UTC, 한국은 KST(UTC+9)야. 같은 시간도 기준에 따라 다르게 표시되거든. 잘못하면 9시간 차이가 나!
시간대 변환
// 한국 시간으로 변환
{{ $now.setZone('Asia/Seoul').toFormat('yyyy-MM-dd HH:mm:ss') }}
// UTC로 변환
{{ $now.toUTC().toISO() }}
// 미국 동부 시간으로
{{ $now.setZone('America/New_York').toFormat('yyyy-MM-dd HH:mm') }}
주요 시간대 코드
| 시간대 | 코드 | UTC 차이 |
|---|---|---|
| 한국 | Asia/Seoul |
+9 |
| 일본 | Asia/Tokyo |
+9 |
| 미국 동부 | America/New_York |
-5/-4 |
| 영국 | Europe/London |
0/+1 |
④ n8n 날짜 비교 — 마감일 지났나?
날짜 비교 메서드
// 두 날짜 사이의 기간
{{ $now.diff(DateTime.fromISO($json.createdAt), 'days').days }}
// 비교 (밀리초 단위)
{{ $now.toMillis() > DateTime.fromISO($json.dueDate).toMillis() }}
// 같은 날인지 확인
{{ $now.hasSame(DateTime.fromISO($json.date), 'day') }}
조건부 활용 예시
// 마감일 지났는지 확인
{{ DateTime.fromISO($json.dueDate) < $now ? '지연됨' : '정상' }}
// 30일 이내 데이터인지
{{ $now.diff(DateTime.fromISO($json.createdAt), 'days').days <= 30 }}
// 주말인지 확인 (6=토, 7=일)
{{ [6, 7].includes($now.weekday) ? '주말' : '평일' }}
⑤ n8n Luxon 실전 패턴 — 복사해서 바로 쓰기
💡 예제 1: 이번 주 월~금 날짜 범위
시작: {{ $now.startOf('week').toFormat('yyyy-MM-dd') }}
종료: {{ $now.startOf('week').plus({days: 4}).toFormat('yyyy-MM-dd') }}
💡 예제 2: 다음 영업일 계산
// 금요일이면 +3일, 토요일이면 +2일, 아니면 +1일
{{
$now.weekday === 5 ? $now.plus({days: 3}).toFormat('yyyy-MM-dd') :
$now.weekday === 6 ? $now.plus({days: 2}).toFormat('yyyy-MM-dd') :
$now.plus({days: 1}).toFormat('yyyy-MM-dd')
}}
💡 예제 3: 경과 시간 계산
// 몇 일 전에 생성되었는지
{{ Math.floor($now.diff(DateTime.fromISO($json.createdAt), 'days').days) }}일 전
// 몇 시간 전에 업데이트되었는지
{{ Math.floor($now.diff(DateTime.fromISO($json.updatedAt), 'hours').hours) }}시간 전
🎯
딱딱씨의 팁
Luxon 공식 문서에서 더 많은 메서드를 확인하세요!
핵심 정리
fromISO/fromFormat - 문자열 → 날짜
startOf/endOf - 기간 시작/끝
setZone - 시간대 변환
diff - 기간 계산
3초 선택 가이드
문자열 → 날짜? → DateTime.fromISO()
이번 달 1일? → $now.startOf('month')
한국 시간으로? → .setZone('Asia/Seoul')
날짜 비교? → $now.diff(날짜, 'days').days
다음 글 예고
👉 n8n SQL 심화 이해하기 : 고급 쿼리와 트랜잭션
날짜 계산은 자동화의 시간 마술입니다.
복잡한 비즈니스 로직도 Luxon으로 해결하세요!
댓글
댓글 쓰기