export const timeRe = /^(?:[012]?\d:\d{2}|1?\d(?::\d{2})?(?:am|pm))$/i export function convertTime(value) { if (/^[012]?\d:\d{2}$/.test(value)) { return value; } const twelveHour = /^(?[01]?\d)(?::(?\d{2}))?(?am|pm)$/i.exec(value); if (twelveHour != null) { let hour = parseInt(twelveHour.groups['hour'], 10); const minute = parseInt(twelveHour.groups['min'] ?? '0', 10); const ampm = twelveHour.groups['ampm'].toLowerCase(); if (hour === 12) { if (ampm === 'am') { hour = 0; } } else if (ampm === 'pm') { if (hour < 12) { hour += 12; } } return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`; } return value; } export function timeToMins(value) { const match = /^(?[012]?\d):(?\d{2})$/.exec(value); if (match) { const hour = parseInt(match.groups.hour, 10); const min = parseInt(match.groups.min, 10); return (hour * 60) + min; } return 0; } export function minsToTime(totalMinutes) { let prefix = totalMinutes < 0 ? '- ' : ''; let absMinutes = Math.abs(totalMinutes); let hours = Math.floor(absMinutes / 60); let minutes = absMinutes % 60; if (minutes > 0) { if (hours > 0) { return `${prefix}${hours}h ${minutes}m`; } return `${prefix}${minutes}m`; } if (hours > 0) { return `${prefix}${hours}h`; } return `${prefix}0m`; }