by codex: feat. General Improvements
This commit is contained in:
@@ -19,6 +19,37 @@ export function formatResetCountdown(resetAtSeconds: number): string {
|
||||
return `resets in ${minutes}m`;
|
||||
}
|
||||
|
||||
export function parseTimeInput(
|
||||
value: string
|
||||
): { hour: number; minute: number } | null {
|
||||
const match = value.trim().match(/^(\d{1,2}):(\d{2})$/);
|
||||
if (!match) return null;
|
||||
|
||||
const hour = Number.parseInt(match[1], 10);
|
||||
const minute = Number.parseInt(match[2], 10);
|
||||
if (hour > 23 || minute > 59) return null;
|
||||
|
||||
return { hour, minute };
|
||||
}
|
||||
|
||||
export function formatTime(hour: number, minute: number): string {
|
||||
return `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
export function formatLastUpdated(timestamp: number, now = Date.now()): string {
|
||||
const elapsedSeconds = Math.max(0, Math.floor((now - timestamp) / 1000));
|
||||
if (elapsedSeconds < 60) return "Updated just now";
|
||||
|
||||
const minutes = Math.floor(elapsedSeconds / 60);
|
||||
if (minutes < 60) return `Updated ${minutes} min ago`;
|
||||
|
||||
const hours = Math.floor(minutes / 60);
|
||||
if (hours < 24) return `Updated ${hours} hr${hours === 1 ? "" : "s"} ago`;
|
||||
|
||||
const days = Math.floor(hours / 24);
|
||||
return `Updated ${days} day${days === 1 ? "" : "s"} ago`;
|
||||
}
|
||||
|
||||
export function formatResetCountdownISO(isoString: string): string {
|
||||
const resetAtSeconds = Math.floor(new Date(isoString).getTime() / 1000);
|
||||
return formatResetCountdown(resetAtSeconds);
|
||||
|
||||
Reference in New Issue
Block a user