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

47 lines
1.2 KiB
JavaScript

const { DateTime } = require("luxon");
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") {
parsed = DateTime.fromISO(dateValue, { zone });
if (!parsed.isValid) {
parsed = DateTime.fromRFC2822(dateValue, { zone });
}
} 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,
};