lumeland / lume

🔥 Static site generator for Deno 🦕
https://lume.land
MIT License
1.79k stars 77 forks source link

Date plugin: Format the date from frontmatter exactly as I specified it #555

Open brookback opened 6 months ago

brookback commented 6 months ago

Enter your suggestions in details:

Hi! Not sure I'm holding this wrong, but I've got a (deceivingly simple) date problem.

Request

I want the specified date and time from my Markdown frontmatter to show in the built site. Currently, all dates and times are formatted in UTC (or whatever TZ is on the machine building the site).

Use case

For the date field in my posts' frontmatter, I use my current local time with time zone offset. Like this:

---
date: 2024-01-18 20:44:58 +7
location: Koh Lanta, Thailand
---

Note the included timezone offset.

When formatting that in the templates, I want that date and time to show. It works on my machine (classic!), but when building on CI for deploying, dates are showing in UTC.

Using the format string PPP — HH:mm:

January 18th, 2024 — 13:44

when I want:

January 18th, 2024 — 20:44

I just want whatever I input as the formatted output 😄

I've read about setting the TZ var when building with lume, but I can't do that, since the local time for each post might vary (I might post across timezones).

Also, I can't do my own hacky date parsing and formatting, since I don't have access to the raw frontmatter record on the Page data: I only have the already parsed date: Date.

Maybe this is out of scope for Lume, but I thought I'd ask. Thanks for a never ending great job ❤️


Info

Related:

oscarotero commented 6 months ago

As an idea, you can preprocess the pages to change the Date. Let's say you create a new variable with the time zone:

date: 2024-01-18 20:44:58
timezone: Asia/Bangkok

And then process the pages assigning the correct timezone.

Lume 2 uses Temporal polyfill (in /deps/temporal.ts) which has functions to work with timezones (see docs here).

Let me know if you can solve it with this. If it works fine, maybe this could be a Lume plugin (Some people ask me about using different timezones in multilanguage sites).

brookback commented 6 months ago

@oscarotero Thanks for replying.

Yes, that'd work too, with the added benefit of documentation in the frontmatter.

But if not, would it be improper to suggest that Lume provides the frontmatter as a part of the Page interface somewhere? As I touched upon in:

Also, I can't do my own hacky date parsing and formatting, since I don't have access to the raw frontmatter record on the Page data: I only have the already parsed date: Date.

As "raw" as possible, meaning, no string → Date parsing whatsoever. Just raw strings (and maybe number | boolean :)).

Or do you consider it leaky?

oscarotero commented 6 months ago

That's no easy. The date parsing is not performed by Lume, but by yaml parsed https://deno.land/std@0.212.0/front_matter/mod.ts