refactor(quota): unify reset time formatting across providers

This commit is contained in:
Bohdan Triapitsyn
2026-02-01 21:06:51 +02:00
parent 71d7a9d086
commit 8e5f83c0a3
3 changed files with 55 additions and 70 deletions
+21 -23
View File
@@ -46,9 +46,25 @@ const normalizeAuthEntry = (entry) => {
return null;
};
const formatResetAt = (timestamp) => {
const formatResetTime = (timestamp) => {
try {
return new Date(timestamp).toLocaleTimeString(undefined, {
const resetDate = new Date(timestamp);
const now = new Date();
const isToday = resetDate.toDateString() === now.toDateString();
if (isToday) {
// Same day: show time only (e.g., "9:56 PM")
return resetDate.toLocaleTimeString(undefined, {
hour: 'numeric',
minute: '2-digit'
});
}
// Different day: show date + weekday + time (e.g., "Feb 2, Sun 9:56 PM")
return resetDate.toLocaleString(undefined, {
month: 'short',
day: 'numeric',
weekday: 'short',
hour: 'numeric',
minute: '2-digit'
});
@@ -57,25 +73,6 @@ const formatResetAt = (timestamp) => {
}
};
const formatDuration = (seconds) => {
if (typeof seconds !== 'number' || Number.isNaN(seconds)) {
return null;
}
const clamped = Math.max(0, Math.round(seconds));
const hours = Math.floor(clamped / 3600);
const minutes = Math.floor((clamped % 3600) / 60);
if (hours === 0 && minutes === 0) {
return '0m';
}
if (hours === 0) {
return `${minutes}m`;
}
if (minutes === 0) {
return `${hours}h`;
}
return `${hours}h ${minutes}m`;
};
const calculateResetAfterSeconds = (resetAt) => {
if (!resetAt) return null;
const delta = Math.floor((resetAt - Date.now()) / 1000);
@@ -84,14 +81,15 @@ const calculateResetAfterSeconds = (resetAt) => {
const toUsageWindow = ({ usedPercent, windowSeconds, resetAt }) => {
const resetAfterSeconds = calculateResetAfterSeconds(resetAt);
const resetFormatted = resetAt ? formatResetTime(resetAt) : null;
return {
usedPercent,
remainingPercent: usedPercent !== null ? Math.max(0, 100 - usedPercent) : null,
windowSeconds: windowSeconds ?? null,
resetAfterSeconds,
resetAt,
resetAtFormatted: resetAt ? formatResetAt(resetAt) : null,
resetAfterFormatted: resetAfterSeconds !== null ? formatDuration(resetAfterSeconds) : null
resetAtFormatted: resetFormatted,
resetAfterFormatted: resetFormatted
};
};