const DAY_IN_MS = 24 * 60 * 60 * 1000; const parseIsoDate = (dateStr) => { const [year, month, day] = dateStr.split("-").map(Number); if (!year || !month || !day) { return null; } return new Date(Date.UTC(year, month - 1, day)); }; export const formatDeliveryDate = (dateStr) => { const parsed = parseIsoDate(dateStr); if (!parsed) { return dateStr; } const day = String(parsed.getUTCDate()).padStart(2, "0"); const month = String(parsed.getUTCMonth() + 1).padStart(2, "0"); const year = String(parsed.getUTCFullYear()); return `${day}.${month}.${year}`; }; export const getDeliveryRelativeDayLabel = (dateStr, referenceDate = new Date()) => { const target = parseIsoDate(dateStr); if (!target) { return ""; } const reference = Date.UTC( referenceDate.getUTCFullYear(), referenceDate.getUTCMonth(), referenceDate.getUTCDate(), ); const diff = Math.round((target.getTime() - reference) / DAY_IN_MS); if (diff === 1) { return "Завтра"; } if (diff === 2) { return "Послезавтра"; } return ""; }; export const formatDeliverySlotGroupLabel = (dateStr, referenceDate = new Date()) => { const formattedDate = formatDeliveryDate(dateStr); const relativeLabel = getDeliveryRelativeDayLabel(dateStr, referenceDate); return relativeLabel ? `${relativeLabel} · ${formattedDate}` : formattedDate; }; export const formatDeliverySlotLabel = ({ date, time } = {}) => { const formattedDate = date ? formatDeliveryDate(date) : ""; if (!formattedDate && !time) { return ""; } if (!formattedDate) { return time || ""; } if (!time) { return formattedDate; } return `${formattedDate}, ${time}`; };