60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
|
|
/**
|
||
|
|
* Utilitaires pour les dates et durées
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convertit une durée au format HH:MM:SS en millisecondes
|
||
|
|
* @param time - Durée au format "HH:MM:SS" ou "MM:SS"
|
||
|
|
* @returns Durée en millisecondes, ou null si invalide
|
||
|
|
*/
|
||
|
|
export function parseTimeToMs(time: string | null | undefined): number | null {
|
||
|
|
if (!time) return null;
|
||
|
|
|
||
|
|
const parts = time.split(':').map(Number);
|
||
|
|
|
||
|
|
if (parts.length === 3) {
|
||
|
|
// HH:MM:SS
|
||
|
|
const hours = parts[0] ?? 0;
|
||
|
|
const minutes = parts[1] ?? 0;
|
||
|
|
const seconds = parts[2] ?? 0;
|
||
|
|
if (isNaN(hours) || isNaN(minutes) || isNaN(seconds)) return null;
|
||
|
|
return (hours * 3600 + minutes * 60 + seconds) * 1000;
|
||
|
|
} else if (parts.length === 2) {
|
||
|
|
// MM:SS
|
||
|
|
const minutes = parts[0] ?? 0;
|
||
|
|
const seconds = parts[1] ?? 0;
|
||
|
|
if (isNaN(minutes) || isNaN(seconds)) return null;
|
||
|
|
return (minutes * 60 + seconds) * 1000;
|
||
|
|
}
|
||
|
|
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convertit des millisecondes en format HH:MM:SS
|
||
|
|
* @param ms - Durée en millisecondes
|
||
|
|
* @returns Durée au format "HH:MM:SS" ou "MM:SS"
|
||
|
|
*/
|
||
|
|
export function formatMsToTime(ms: number | null): string {
|
||
|
|
if (ms === null || ms === undefined || ms < 0) return '--:--';
|
||
|
|
|
||
|
|
const totalSeconds = Math.floor(ms / 1000);
|
||
|
|
const hours = Math.floor(totalSeconds / 3600);
|
||
|
|
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
||
|
|
const seconds = totalSeconds % 60;
|
||
|
|
|
||
|
|
const h = hours > 0 ? `${hours}:` : '';
|
||
|
|
const m = `${minutes.toString().padStart(2, '0')}:`;
|
||
|
|
const s = seconds.toString().padStart(2, '0');
|
||
|
|
|
||
|
|
return `${h}${m}${s}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convertit des millisecondes en format court (pour l'affichage progress)
|
||
|
|
* @param ms - Durée en millisecondes
|
||
|
|
* @returns Durée au format "X:XX" ou "X:XX:XX"
|
||
|
|
*/
|
||
|
|
export function formatMsToShortTime(ms: number | null): string {
|
||
|
|
return formatMsToTime(ms);
|
||
|
|
}
|