#网站/打卡/书法
const folder = "个人网站/打卡/书法";
// 1. 拉取所有符合条件的页面,排除“书法练习”,并按创建时间倒序(时间戳)
let pages = dv.pages(`"${folder}"`)
.filter(p => p.file.name !== "书法练习")
.filter(p => p["dg-publish"] === true)
.sort(p => p.file.ctime.ts, 'desc');
// 2. 按 年-月 分组
let monthGroups = {};
for (let p of pages) {
let dt = p.file.ctime;
let key = `${dt.year}-${dt.month}`;
if (!monthGroups[key]) monthGroups[key] = [];
monthGroups[key].push(p);
}
// 3. 输出(按年-月 从新到旧)
let monthKeys = Object.keys(monthGroups)
.sort((a, b) => {
let [ay, am] = a.split('-').map(Number);
let [by, bm] = b.split('-').map(Number);
// 倒序(新到旧)
if (by !== ay) return by - ay;
return bm - am;
});
for (let monthKey of monthKeys) {
// 月标题
let [year, month] = monthKey.split('-');
dv.paragraph(`**${year} 年 ${month} 月:**`);
let groupPages = monthGroups[monthKey];
// 按创建时间决定天的顺序:计算每天的最大创建时间戳,然后按该时间戳倒序(保证天的顺序也以创建时间为准)
let dayInfos = {};
for (let p of groupPages) {
let d = p.file.ctime.day;
if (!dayInfos[d]) dayInfos[d] = p.file.ctime.ts;
else dayInfos[d] = Math.max(dayInfos[d], p.file.ctime.ts);
}
let days = Object.keys(dayInfos).map(Number).sort((a, b) => dayInfos[b] - dayInfos[a]);
for (let day of days) {
dv.paragraph(`\n${day} 号:`);
// 当天的文章,按创建时间倒序(不再使用最后修改时间排序)
let dayPages = groupPages
.filter(p => p.file.ctime.day === day)
.sort((a, b) => b.file.ctime.ts - a.file.ctime.ts);
for (let p of dayPages) {
let filepath = p.file.path.replace(/\$/, "");
let link = `《${p.file.name}》`;
let m = p.file.mtime;
let modified = `${m.year}.${m.month}.${m.day}`;
dv.paragraph(`${link} 『最后一次修改时间:${modified}』`);
}
}
dv.paragraph(""); // 月份之间空行
}