Ajout de données météo
This commit is contained in:
46
tools/lib/weather/time.js
Normal file
46
tools/lib/weather/time.js
Normal file
@@ -0,0 +1,46 @@
|
||||
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,
|
||||
};
|
||||
Reference in New Issue
Block a user