/**
* @file format-time.js
* @module format-time
*/
/**
* Format des secondes sous forme de chaîne de temps, H:MM:SS ou M:SS. Fournir un guide (en
* secondes) forcera un nombre de zéros en tête pour couvrir la longueur de l'article
* guide.
*
* @private
* @param {number} seconds
* Nombre de secondes à transformer en chaîne de caractères
*
* @param {number} guide
* Nombre (en secondes) après lequel la chaîne doit être modélisée
*
* @return {string}
* Heure formatée en H:MM:SS ou M:SS
*/
const defaultImplementation = function(seconds, guide) {
seconds = seconds < 0 ? 0 : secondes ;
let s = Math.floor(seconds % 60) ;
let m = Math.floor(seconds / 60 % 60) ;
let h = Math.floor(seconds / 3600) ;
const gm = Math.floor(guide / 60 % 60) ;
const gh = Math.floor(guide / 3600) ;
// gérer les temps non valides
if (isNaN(seconds) || seconds === Infinity) {
// "-" est faux pour tous les opérateurs relationnels (par exemple <, >=), ce qui explique ce paramètre
// ajoutera le nombre minimum de champs spécifié par le guide
h = m = s = '-' ;
}
// Vérifier si nous devons afficher les heures
h = (h > 0 || gh > 0) ? h + ':' : '' ;
// Si les heures sont affichées, il peut être nécessaire d'ajouter un zéro initial.
// Toujours afficher au moins un chiffre des minutes.
m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':' ;
// Vérifier si le zéro initial est nécessaire pour les secondes
s = (s < 10) ? '0' + s : s ;
retour h + m + s ;
};
// Pointeur interne vers l'implémentation actuelle.
let implementation = defaultImplementation ;
/**
* Remplace l'implémentation par défaut de formatTime par une implémentation personnalisée.
*
* @param {Fonction} customImplementation
* Une fonction qui sera utilisée à la place du formatTime par défaut
* la mise en œuvre. Recevra l'heure actuelle en secondes et le
* guide (en secondes) comme arguments.
*/
export function setFormatTime(customImplementation) {
implementation = customImplementation ;
}
/**
* Réinitialise formatTime à l'implémentation par défaut.
*/
export function resetFormatTime() {
implementation = defaultImplementation ;
}
/**
* Délègue à la fonction de formatage de l'heure par défaut ou à une fonction de formatage de l'heure personnalisée
* fournie par `setFormatTime`.
*
* Formate les secondes sous forme de chaîne de temps (H:MM:SS ou M:SS). Fournir un
* (en secondes) forcera un nombre de zéros initiaux à couvrir le guide de
* longueur du guide.
*
* @statique
* @exemple formatTime(125, 600) === "02:05"
* @param {number} seconds
* Nombre de secondes à transformer en chaîne de caractères
*
* @param {number} guide
* Nombre (en secondes) après lequel la chaîne doit être modélisée
*
* @return {string}
* Heure formatée en H:MM:SS ou M:SS
*/
function formatTime(seconds, guide = seconds) {
return implementation(seconds, guide) ;
}
exporter le format par défautTime ;