From 729b84c08c72a34c6dd2c306554979613dbe6743 Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Thu, 5 Dec 2024 03:49:08 -0600 Subject: [PATCH] feat(dates): allow configurable default timezone --- docs/plugins/CreatedModifiedDate.md | 1 + quartz/plugins/transformers/lastmod.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/docs/plugins/CreatedModifiedDate.md b/docs/plugins/CreatedModifiedDate.md index f4134c47866ca..6121a691a3b42 100644 --- a/docs/plugins/CreatedModifiedDate.md +++ b/docs/plugins/CreatedModifiedDate.md @@ -12,6 +12,7 @@ This plugin determines the created, modified, and published dates for a document This plugin accepts the following configuration options: - `priority`: The data sources to consult for date information. Highest priority first. Possible values are `"frontmatter"`, `"git"`, and `"filesystem"`. Defaults to `["frontmatter", "git", "filesystem"]`. +- `timezone`: The timezone that is assumed (IANA format, e.g. `Africa/Abidjan`) when one is not specified in the datetime frontmatter properties. Defaults to `system`: the system's local timezone. > [!warning] > If you rely on `git` for dates, make sure `defaultDateType` is set to `modified` in `quartz.config.ts`. diff --git a/quartz/plugins/transformers/lastmod.ts b/quartz/plugins/transformers/lastmod.ts index 3970d1c515f6d..30c9b4207231c 100644 --- a/quartz/plugins/transformers/lastmod.ts +++ b/quartz/plugins/transformers/lastmod.ts @@ -4,13 +4,21 @@ import { DateTime, DateTimeOptions } from "luxon" import { Repository } from "@napi-rs/simple-git" import { QuartzTransformerPlugin } from "../types" import chalk from "chalk" +import { Settings as LuxonSettings } from "luxon/src/settings" export interface Options { priority: ("frontmatter" | "git" | "filesystem")[] + /** + * The default timezone when handling dates. + * Valid options are "system" (default), "utc", an IANA string, or a UTC offset + * https://moment.github.io/luxon/#/zones?id=specifying-a-zone + */ + timezone: "system" | string } const defaultOptions: Options = { priority: ["frontmatter", "git", "filesystem"], + timezone: "system", } function parseDateString(fp: string, d: string | number | unknown): DateTime | undefined { @@ -51,6 +59,8 @@ function parseDateString(fp: string, d: string | number | unknown): DateTime> = (userOpts) => { const opts = { ...defaultOptions, ...userOpts } + // note that this will affect the behavior of Luxon globally + LuxonSettings.defaultZone = opts.timezone return { name: "CreatedModifiedDate", markdownPlugins() {