1
Files
2025/tools/lib/weather/time.js

45 lines
1.3 KiB
JavaScript

const { DateTime } = require("luxon");
const { parseHugoDateString } = require("../datetime");
function hasExplicitTime(rawDate) {
if (!rawDate) return false;
const cleaned = rawDate.replace(/^['"]|['"]$/g, "");
return /\d{2}:\d{2}/.test(cleaned);
}
function resolveArticleDate(dateValue, rawDate, { timezone = "Europe/Paris", defaultHour = 12, defaultMinute = 0 } = {}) {
const hasTime = hasExplicitTime(rawDate);
const zone = timezone || "UTC";
let parsed;
if (typeof dateValue === "string") {
const source = rawDate || dateValue;
parsed = parseHugoDateString(source, zone, defaultHour, defaultMinute);
} else if (dateValue instanceof Date) {
parsed = DateTime.fromJSDate(dateValue, { zone });
}
if (!parsed || !parsed.isValid) return null;
if (!hasTime) {
parsed = parsed.set({ hour: defaultHour, minute: defaultMinute, second: 0, millisecond: 0 });
}
return parsed;
}
function buildTimeWindow(target, windowMinutes = 60) {
const minutes = Number.isFinite(windowMinutes) ? windowMinutes : 60;
return {
start: target.minus({ minutes }),
end: target.plus({ minutes }),
};
}
module.exports = {
buildTimeWindow,
hasExplicitTime,
resolveArticleDate,
};