n8n 날짜 표현식 고급편 : 복잡한 시간 계산 마스터

목차

    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으로 해결하세요!

    댓글

    이 블로그의 인기 게시물

    n8n으로 업무 자동화 시작하기 : 왜 필요하고 어떻게 활용할까?

    n8n 데이터 처리 노드 : Set, Split, Merge 완벽 정리

    n8n 트리거 노드 : 3가지 유형으로 자동화 시작하기