From 1cfc87652c0b4889ab62e1010da9d988f08c4cd1 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Mon, 02 Jun 2025 05:42:37 +0000
Subject: [PATCH] fix: tz-less date parse in local tz instead of utc (closes #1615)
---
quartz/plugins/transformers/frontmatter.ts | 6 +++++-
quartz/plugins/transformers/lastmod.ts | 10 ++++++++++
2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/quartz/plugins/transformers/frontmatter.ts b/quartz/plugins/transformers/frontmatter.ts
index ce57428..1103900 100644
--- a/quartz/plugins/transformers/frontmatter.ts
+++ b/quartz/plugins/transformers/frontmatter.ts
@@ -101,7 +101,11 @@
const socialImage = coalesceAliases(data, ["socialImage", "image", "cover"])
const created = coalesceAliases(data, ["created", "date"])
- if (created) data.created = created
+ if (created) {
+ data.created = created
+ data.modified ||= created // if modified is not set, use created
+ }
+
const modified = coalesceAliases(data, [
"modified",
"lastmod",
diff --git a/quartz/plugins/transformers/lastmod.ts b/quartz/plugins/transformers/lastmod.ts
index 668634a..32a89cc 100644
--- a/quartz/plugins/transformers/lastmod.ts
+++ b/quartz/plugins/transformers/lastmod.ts
@@ -12,7 +12,17 @@
priority: ["frontmatter", "git", "filesystem"],
}
+// YYYY-MM-DD
+const iso8601DateOnlyRegex = /^\d{4}-\d{2}-\d{2}$/
+
function coerceDate(fp: string, d: any): Date {
+ // check ISO8601 date-only format
+ // we treat this one as local midnight as the normal
+ // js date ctor treats YYYY-MM-DD as UTC midnight
+ if (typeof d === "string" && iso8601DateOnlyRegex.test(d)) {
+ d = `${d}T00:00:00`
+ }
+
const dt = new Date(d)
const invalidDate = isNaN(dt.getTime()) || dt.getTime() === 0
if (invalidDate && d !== undefined) {
--
Gitblit v1.10.0