diff --git a/eleventy.config.js b/eleventy.config.js index 3d8fb27..cbc0c92 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -8,7 +8,37 @@ const toml = require("@iarna/toml"); const fs = require("fs"); const path = require("path"); +const TIME_ZONE = "America/Santiago"; + module.exports = function (eleventyConfig) { + eleventyConfig.addDateParsing(function (dateValue) { + // i know this is a deranged solution. sorry LOL + let localDate; + try { + if (dateValue instanceof Date && !isNaN(dateValue)) { + // handle filename dates (ie 2025-10-18-post.md) + localDate = DateTime.fromJSDate(dateValue, { zone: "utc" }) + .setZone(TIME_ZONE) + .startOf("day"); // Set to midnight in America/Santiago + } else if (typeof dateValue === "string" && dateValue) { + // handle string dates (ie from front matter, if used) + localDate = DateTime.fromISO(dateValue, { zone: TIME_ZONE }).startOf("day"); + } else { + // handle invalid input + console.warn(`Invalid date value: ${dateValue} for ${this.page.inputPath}`); + localDate = DateTime.now().setZone(TIME_ZONE).startOf("day"); + } + if (!localDate || localDate.isValid === false) { + throw new Error(`Invalid date value (${dateValue}) for ${this.page.inputPath}: ${localDate?.invalidReason || "Unknown"}`); + } + return localDate.toJSDate(); + } catch (error) { + console.error(`Date parsing error for ${this.page.inputPath}:`, error.message); + // fallback to current date in TIME_ZONE + return DateTime.now().setZone(TIME_ZONE).startOf("day").toJSDate(); + } + }); + eleventyConfig.setLayoutsDirectory("_layouts"); eleventyConfig.addPassthroughCopy("img"); @@ -35,8 +65,26 @@ module.exports = function (eleventyConfig) { return filtered; }); - eleventyConfig.addFilter("date", function (dateObj, format) { - return DateTime.fromJSDate(dateObj).toFormat(format); + eleventyConfig.addFilter("date", function (dateObj, format = "dd/MM/yyyy") { + let dt = dateObj; + // handle string dates + if (typeof dateObj === "string") { + dt = DateTime.fromISO(dateObj, { zone: TIME_ZONE }).toJSDate(); + } + // handle DateTime objects (from addDateParsing) + if (dateObj instanceof DateTime) { + dt = dateObj.toJSDate(); + } + // check dt as valid Date object + if (!(dt instanceof Date) || isNaN(dt)) { + console.log("Invalid date input:", dateObj); + return ""; + } + // format in TIME_ZONE + const formatted = DateTime.fromJSDate(dt, { zone: TIME_ZONE }) + .toFormat(format); + console.log("Date input:", dt, "Formatted:", formatted, "Timezone:", TIME_ZONE); + return formatted; }); eleventyConfig.addPlugin(eleventySass);