server/lib/time.js Repository wynajem_motorowek Original path server/lib/time.jsRole SOURCE Size 1349 bytes Lines 45 SHA-256 74f138e013fd8bc298fdc19c31ff12cd0b2600b9ab5940c0dc490019f8f0cd3eDisplayed range 1–45 Previous file/page · Project index · Next file/page
const DAY_START_MIN = 8 * 60;
const DAY_END_MIN = 20 * 60;
function parseDateKey(dateKey) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(dateKey || "")) return null;
const date = new Date(`${dateKey}T00:00:00`);
if (Number.isNaN(date.getTime())) return null;
return date;
}
function parseTimeToMinutes(timeText) {
if (!/^\d{2}:\d{2}$/.test(timeText || "")) return null;
const [hh, mm] = timeText.split(":").map((part) => Number(part));
if (!Number.isInteger(hh) || !Number.isInteger(mm)) return null;
if (hh < 0 || hh > 23 || mm < 0 || mm > 59) return null;
return hh * 60 + mm;
}
function minutesToTimeText(totalMinutes) {
const hh = String(Math.floor(totalMinutes / 60)).padStart(2, "0");
const mm = String(totalMinutes % 60).padStart(2, "0");
return `${hh}:${mm}`;
}
function atDateAndMinutes(dateKey, totalMinutes) {
return new Date(`${dateKey}T00:00:00`).getTime() + totalMinutes * 60_000;
}
function toIsoAtDateAndMinutes(dateKey, totalMinutes) {
return new Date(atDateAndMinutes(dateKey, totalMinutes)).toISOString();
}
function overlap(aStartMs, aEndMs, bStartMs, bEndMs) {
return aStartMs < bEndMs && aEndMs > bStartMs;
}
module.exports = {
DAY_START_MIN,
DAY_END_MIN,
parseDateKey,
parseTimeToMinutes,
minutesToTimeText,
toIsoAtDateAndMinutes,
overlap,
};