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, };