```dataviewjs const today = moment().format('YYYY-MM-DD'); const pages = dv.pages('""').where(p => p.type === 'schedule' && (p.start_date || p.startDate) && (p.end_date || p.endDate)); let results = []; for (const page of pages) { const rawStart = page.start_date || page.startDate; const rawEnd = page.end_date || page.endDate; const startStr = rawStart.toISODate ? rawStart.toISODate() : String(rawStart).substring(0, 10); const endStr = rawEnd.toISODate ? rawEnd.toISODate() : String(rawEnd).substring(0, 10); if (today >= startStr && today <= endStr) { // 연도를 제외하고 월일만 추출 (예: "2026-09-20" -> "09-20") const startShort = startStr.substring(5); const endShort = endStr.substring(5); results.push({ ...page, startStr, endStr, periodText: `${startShort} ~ ${endShort}` // 월일만 담긴 기간 문자열 }); } } dv.header(2, `🗓️ 오늘 일정 (${today})`); if (results.length === 0) { dv.paragraph("오늘은 등록된 일정이 없습니다."); } else { const getBadgeClass = (val, type) => { if (!val) return ""; let lower = String(val).toLowerCase(); let badgeType = ""; if (type === 'status') { if (lower.includes('todo') || lower.includes('대기')) badgeType = 'badge-todo'; else if (lower.includes('진행') || lower.includes('doing')) badgeType = 'badge-doing'; else if (lower.includes('완료') || lower.includes('done')) badgeType = 'badge-done'; else badgeType = 'badge-todo'; } else if (type === 'priority') { if (lower.includes('high') || lower.includes('상') || lower.includes('중요')) badgeType = 'badge-high'; else if (lower.includes('mid') || lower.includes('중')) badgeType = 'badge-medium'; else badgeType = 'badge-low'; } return `${val}`; }; const truncateText = (text, limit = 20) => { if (!text) return ""; let str = String(text); return str.length > limit ? str.substring(0, limit) + "..." : str; }; const tableData = results.map(p => { let rawProject = p.project || ""; let rawTitle = p.file.name; let displayProject = truncateText(rawProject, 20); let displayTitle = truncateText(rawTitle, 20); let projectHtml = `${displayProject}`; let titleLinkHtml = `[[${p.file.path}|${displayTitle}]]`; return [ projectHtml, titleLinkHtml, getBadgeClass(p.priority || p.importance, 'priority'), getBadgeClass(p.status, 'status'), p.periodText // 연도가 빠진 월일 기간 표시 ]; }); dv.table(["프로젝트", "일정명", "중요도", "진행상황", "기간"], tableData); // CSS 클래스 적용 const lastTable = dv.container.querySelector("table"); if (lastTable) { let wrapper = lastTable.parentElement; if (wrapper) wrapper.addClass("today-schedule-table"); } } ```