Jacky Zhao
2025-06-02 1cfc87652c0b4889ab62e1010da9d988f08c4cd1
fix: tz-less date parse in local tz instead of utc (closes #1615)
2 files modified
16 ■■■■■ changed files
quartz/plugins/transformers/frontmatter.ts 6 ●●●● patch | view | raw | blame | history
quartz/plugins/transformers/lastmod.ts 10 ●●●●● patch | view | raw | blame | history
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",
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) {