대표 이미지 설명: 완료 여부와 날짜 값, 오늘과의 비교 순서로 결과를 나눕니다. 그림은 이 글의 업무 기준을 설명할 뿐 실제 Bases 화면이나 실측 결과가 아닙니다.
Obsidian Bases에서 마감이 지난 노트만 보고 싶다면 수식부터 붙여 넣기보다 먼저 당일을 지연으로 볼지 정해야 합니다. 이 글의 규칙은 ‘완료는 제외, 유효한 날짜가 기준일보다 이전일 때만 지연, 날짜가 비었거나 잘못됐으면 날짜 확인’입니다. 이는 Obsidian의 기본 규칙이 아니라 이 글에서 선택한 업무 기준입니다. status와 due_date 속성의 타입을 확인하고, 계산 열이 있는 전체 점검 뷰와 지연만 보이는 뷰를 따로 만들어 확인하겠습니다.
실습 근거는 Obsidian Desktop 1.13.7, macOS 27.0, 한국시간(UTC+09:00)의 분리된 시험용 볼트에서 2026년 10월 5일 오전 7시 9분~20분에 확인한 화면과 노트·.base 원본입니다. 실제 업무 데이터를 쓰지 않았고, 시스템 시계를 바꾸지 않았습니다. 다른 날짜에 이 예제를 열면 today()의 기준일과 결과가 달라집니다. 공식 수식 도움말, Bases 문법, 함수, 속성을 함께 참고했습니다.
오늘이 마감인 노트는 이미 지연인가요?
이 글에서는 날짜만 가진 due_date가 오늘이면 아직 지연이 아닙니다. 지나간 날짜이고 상태가 Done이 아닐 때만 지연을 표시합니다. 시각까지 정한 마감이나 알림은 다루지 않습니다.
공식 함수 목록에 따르면 today()는 현재 날짜의 자정, now()는 현재 순간을 반환합니다. Obsidian의 기본 overdue 예제는 if(due_date < now() && status != "Done", "Overdue", "")입니다. 이번 별도 시험의 2026-10-05 날짜형 행 B는 그날 오전 now() 비교열에서 Overdue였지만, today() 기반의 업무 수식에서는 빈칸이었습니다. 따라서 기본 예제를 ‘오늘 마감은 아직 안 늦음’이라는 규칙으로 그대로 복사하지 않습니다. 이는 날짜만 가진 한 행을 한국시간 오전에 관측한 결과이지, 다른 시간대나 날짜+시간 마감의 일반 법칙을 검증한 것은 아닙니다.
날짜와 상태는 어떤 속성으로 준비하나요?
작은 복사 볼트에서 Cases 폴더에 다음과 같은 시험 노트를 둡니다. 실제 노트에 같은 키가 이미 있는지부터 확인하세요. 이 실습의 status는 Text, due_date는 Date 속성입니다. Obsidian은 같은 이름의 속성 타입을 볼트 전체에서 사용하므로 기존 키를 다른 뜻으로 쓰고 있다면 새 키를 정하고 수식도 함께 바꿔야 합니다. 속성 도움말
---
status: Draft
due_date: 2026-10-04
---
위는 Cases/A.md의 날짜형 설명용 입력입니다. A~G의 원본은 아래처럼 구성했습니다. Other/control.md에는 Draft·2026-10-04를 넣되 대상 폴더 밖의 대조군으로 뒀습니다. E는 due_date: 키만 있고 값이 없고, F는 키가 없으며, G는 due_date: 날짜 미정이라는 잘못된 날짜 문자열을 고의로 넣었습니다. 시험 앱에서 G의 원문과 화면이 실제로 날짜 미정으로 남은 것도 확인했습니다. 기존 노트의 값을 이런 문자열로 바꿔 시험하라는 뜻이 아닙니다.
| 노트 | status | due_date 원본 | 이 글의 확인 목적 |
|---|---|---|---|
| A | Draft | 2026-10-04 | 과거·미완료 |
| B | Draft | 2026-10-05 | 기준일 당일 |
| C | Draft | 2026-10-06 | 미래 |
| D | Done | 2026-10-04 | 과거·완료 |
| E | Draft | 키는 있으나 빈값 | 미입력 |
| F | Draft | 키 없음 | 누락 |
| G | Draft | 날짜 미정 문자열 |
잘못된 타입 |

계산 열은 빈 날짜와 완료를 어떻게 나누나요?
Bases에서 새 .base를 만들고 Properties → Add formula로 이름이 overdue_label인 계산 속성을 추가합니다. 시험 앱의 입력창에서 유효한 식으로 확인하고, .base 파일 원본과 표의 값을 다시 대조했습니다. 먼저 고정 기준일 2026-10-05를 썼습니다. 이 날짜는 현재 시각이 아니라 사례를 검증하기 위해 정한 D입니다.
if(status == "Done", "", if(!due_date.isType("date"), "날짜 확인", if(due_date < date("2026-10-05"), "지연", "")))
식의 첫 분기는 완료를 빈칸으로 표시합니다. 다음 분기는 날짜형이 아닌 값, 빈값, 누락을 날짜 확인으로 드러냅니다. 마지막 분기에서 유효한 날짜만 D와 비교합니다. 완료와 날짜 오류가 동시에 있으면 완료 제외를 우선하는 것이 이번 정책입니다. 이 우선순위가 업무와 다르면 수식을 그대로 사용하지 마세요. 공식 함수 목록은 if()·isType()·date()를 설명하며, 이 조합의 실제 E/F/G 값은 아래 격리 앱에서 따로 확인했습니다.
고정 기준일의 행별 실측 결과입니다. 같은 날짜의 today()로 바꾼 화면에서도 A~G의 표시가 같았습니다. ‘빈칸’은 표에서 아무 글자도 표시되지 않았다는 뜻입니다.
| Cases 노트 | 고정 기준일 D의 overdue_label |
공식 now() 예제 비교열 |
이 글의 해석 |
|---|---|---|---|
| A | 지연 | Overdue | 유효한 과거 날짜·미완료 |
| B | 빈칸 | Overdue | 기준일 당일은 이번 규칙상 미지연 |
| C | 빈칸 | 빈칸 | 미래 |
| D | 빈칸 | 빈칸 | 완료 제외 |
| E | 날짜 확인 | 빈칸 | 빈 날짜 키 |
| F | 날짜 확인 | 빈칸 | 날짜 키 없음 |
| G | 날짜 확인 | 빈칸 | 날짜 아닌 문자열 |

비교열 official_now_label은 기본 예제와의 차이를 보기 위해서만 만들었습니다. 실제 업무 분류는 overdue_label이 맡습니다. 잘못된 날짜를 빈칸이나 ‘정상’으로 조용히 취급하면 점검 대상이 지연 뷰에서 사라지므로, 전체 뷰를 함께 유지해야 합니다.
전체 날짜 점검과 지연만 보이는 뷰는 어떻게 만드나요?
시험에서 저장한 최소 Deadline.base 구조는 아래와 같습니다. 기존 파일을 덮어쓰지 말고 새 시험용 Base에서 속성 이름, 폴더 범위, 수식/뷰를 확인하세요. today() 버전은 고정일 시험과 달리 열 때의 날짜를 기준으로 합니다.
filters:
and:
- file.inFolder("Cases")
- file.ext == "md"
formulas:
overdue_label: if(status == "Done", "", if(!due_date.isType("date"), "날짜 확인", if(due_date < today(), "지연", "")))
official_now_label: if(due_date < now() && status != "Done", "Overdue", "")
views:
- type: table
name: 날짜 점검
order:
- file.name
- status
- due_date
- formula.overdue_label
- formula.official_now_label
- type: table
name: 지연만
filters:
and:
- formula.overdue_label == "지연"
order:
- file.name
- status
- due_date
- formula.overdue_label
범위 필터는 Cases의 Markdown 노트만 포함해 Other/control.md와 .base 자체를 제외합니다. 날짜 점검에는 시험 당시 A~G 7행이, 지연만에는 A 1행이 남았습니다. 이는 Bases 문법의 전체 필터와 뷰별 필터를 이용해 실제 앱에서 확인한 작은 시험 결과입니다. ‘날짜 확인’인 E/F/G는 지연만 뷰에는 없지만 날짜 점검 뷰에서는 보여야 합니다. 필터 기초나 목록이 아예 비는 범위 문제는 Bases의 포함 범위 점검 글에서 따로 다룹니다.
뷰를 막 전환하면 제목은 지연만으로 바뀌었는데 이전 7행 표가 잠시 남아 있는 화면도 관측됐습니다. 뷰를 다시 열어 결과 행 수가 안정화됐는지 확인한 뒤 기록하세요. 전환 중 화면을 필터 결과로 간주하지 않습니다.
완료 상태를 바꾸면 원본은 어떻게 되나요?
격리 볼트의 Bases 표에서 A의 status를 Draft에서 Done으로 바꾸자 원본 Cases/A.md에 status: Done이 저장되고 계산 열의 지연은 빈칸이 됐습니다. 지연만 뷰를 다시 열어 화면이 안정된 뒤에는 0행이었습니다. 다시 앱의 셀에서 Draft로 되돌리자 원본 A는 최초 파일과 바이트 단위로 같아졌고 전체 7행·지연만 A 1행이 돌아왔습니다. 완료로 바뀐 것은 사람이 수정한 원본 status이지, 수식이 노트를 자동 완료한 결과가 아닙니다. overdue_label 수식은 Deadline.base에 있었고 A의 YAML에는 쓰이지 않았습니다. 공식 Bases 문법도 노트 속성과 .base 수식 속성의 저장 위치를 구분합니다.
자신의 결과가 다르면 해당 노트 YAML의 status·due_date와 Done의 대소문자, 볼트의 Text·Date 타입, Cases 폴더 포함 여부를 차례로 확인하세요. 날짜 점검 뷰에서 날짜 확인이 보이는지, 뷰를 다시 연 뒤 행 수가 안정됐는지도 살펴봅니다. 속성 이름을 deadline이나 완료로 쓰는 볼트라면 노트와 수식 양쪽 이름을 맞춰야 합니다.
날짜와 시각이 함께 있는 마감, 다른 시간대, 자정 무렵 자동 재계산, 모바일·Sync, 대형 볼트 성능, 반복 알림은 이 시험에서 검증하지 않았습니다. 노트가 몇 개뿐이라면 수식과 뷰 두 개를 유지하기보다 날짜 원문을 수동 점검하는 편이 쉬울 수 있습니다.






