Je souhaite convertir une durée, c'est-à-dire un nombre de secondes en chaîne de temps séparée par deux-points (hh: mm: ss)
J'ai trouvé des réponses utiles ici, mais elles parlent toutes de la conversion au format x heures et x minutes.
Y a-t-il donc un petit extrait qui fait cela dans jQuery ou tout simplement du JavaScript brut?
Réponses:
Vous pouvez l'utiliser maintenant comme:
Extrait de travail:
Afficher l'extrait de code
la source
Vous pouvez gérer cela sans aucune bibliothèque JS externe à l'aide de la méthode JS Date, comme suit:
la source
new Date(1000 * seconds).toISOString().substr(11, 8)
..replace(/^[0:]+/, "")
aprèssubstr
pour supprimer tous les zéros et:
depuis le début de la chaîne.Pour obtenir la partie temporelle au format
hh:MM:ss
, vous pouvez utiliser cette expression régulière:(Cela a été mentionné ci-dessus dans le même message par quelqu'un, merci pour cela.)
la source
var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
replace
est déroutant. Pourquoi ne pas utilisernew Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]
?new Date().toTimeString().split(" ")[0]
Je recommande le javascript ordinaire, en utilisant l'objet Date:
(Bien sûr, l'objet Date créé aura une date réelle qui lui est associée, mais ces données sont étrangères, donc à ces fins, vous n'avez pas à vous en soucier.)
la source
date.getUTCHours()
etdate.getUTCMinutes()
.Une recherche Google a révélé ce résultat :
la source
secondsToTime(119.9)
=>Object {h: 0, m: 1, s: 60}
. Pour résoudre ce problème, ajoutezsecs = Math.round(secs);
au début de la méthode. Bien sûr, nous avons vu ce bug lors de la démo ...Variation sur un thème. Gère les secondes à un chiffre un peu différemment
la source
Voici mon point de vue:
Résultats attendus:
la source
const formatTime = (seconds, h = Math.floor(seconds / 3600), m = Math.floor((seconds % 3600) / 60), s = seconds % 60) => [h, m > 9 ? m : '0' + m, s > 9 ? s : '0' + s].filter(s => s).join(':');
second
arguments. Je trouve ma version plus claire même si elle est un peu plus verbeuse.seconds: number
annotations de type, en es6?const s = Math.round(seconds % 60);
J'aime la première réponse. Il y a quelques optimisations:
les données source sont un nombre. aucun calcul supplémentaire n'est nécessaire.
beaucoup trop d'informatique
Code de résultat:
la source
Number
c'est juste parce queseconds
, en fait, c'est un nombre. vous devez convertir à partir d'une chaîne avant d'utiliser cette fonction, ce qui est la bonne chose à faire!En utilisant l'incroyable bibliothèque moment.js :
Cela vous permet de spécifier n'importe quelle durée (heures, minutes, secondes, fraisages) et renvoie une version lisible par l'homme.
la source
la source
new Date().toString().split(" ")[4];
résultat
15:08:03
la source
new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]
où ellestartTime
avait été définie précédemment en utilisantstartTime = new Date().getTime();
. (J'ai dû utilisertoUTCString()
parce que sinon les temps étaient à une heure.)C'est assez simple,
la source
résultat:
la source
J'ai aimé que Webjins réponde le plus, je l'ai donc étendu aux jours d'affichage avec suffixe publicitaire, rendu l'affichage conditionnel et inclus comme suffixe en quelques secondes:
renvoie "3d 16:32:12" ou "16:32:12" ou "32:12" ou "12s"
la source
J'ai adoré la réponse de Powtac, mais je voulais l'utiliser dans angular.js, j'ai donc créé un filtre en utilisant son code.
Il est fonctionnellement identique, sauf que j'ai ajouté un champ décimal facultatif pour afficher les secondes fractionnaires. Utilisez-le comme n'importe quel autre filtre:
{{ elapsedTime | HHMMSS }}
affiche:01:23:45
{{ elapsedTime | HHMMSS : 3 }}
affiche:01:23:45.678
la source
Je pense que sur le plan des performances, c'est de loin le plus rapide:
la source
Exemples
la source
Math.floor()
les secondes car elles pourraient être données en décimales. (Arrivé avec moi.)Voici encore une autre version, qui gère également les jours:
la source
Une expression régulière peut être utilisée pour faire correspondre la sous-chaîne d'heure dans la chaîne renvoyée par la
toString()
méthode de l'objet Date, qui est formatée comme suit: "Thu Jul 05 2012 02:45:12 GMT + 0100 (GMT Daylight Time)". Notez que cette solution utilise le temps depuis l'époque: minuit du 1er janvier 1970. Cette solution peut être une ligne, bien que la diviser la rende beaucoup plus facile à comprendre.la source
Voici comment je l'ai fait. Il semble fonctionner assez bien et il est extrêmement compact. (Il utilise cependant beaucoup d'opérateurs ternaires)
... et pour formater les chaînes ...
la source
Vous pouvez utiliser la fonction suivante pour convertir le temps (en secondes) au
HH:MM:SS
format:Sans passer de séparateur, il utilise
:
comme séparateur (par défaut):Si vous souhaitez utiliser
-
comme séparateur, passez-le simplement comme deuxième paramètre:Démo
Voir aussi ce violon .
la source
Il y a une nouvelle méthode pour les chaînes sur le bloc: padStart
Voici un exemple d'utilisation: durées YouTube en 4 lignes de JavaScript
la source
C'est comme ça que je l'ai fait
timeFromSecs (22341938) renverra '258d 14h 5m 38s'
la source
Personnellement, je préfère l'unité de tête (jours, heures, minutes) sans zéros de tête. Mais les secondes doivent toujours être précédées de minutes (0:13), cette présentation est facilement considérée comme de la «durée», sans autre explication (marquage en min, sec (s), etc.), utilisable en plusieurs langues (internationalisation).
// imitant le formatage de la durée côté serveur (.net, C #) comme:
la source
Vous pouvez utiliser Momement.js avec un plugin au format moment-durée :
Voir aussi ce violon
la source
où le paramètre de paramètres régionaux ("en", "de", etc.) est facultatif
la source
la source
Voici un one-liner mis à jour pour 2019:
la source
Date
objet.Voici une solution assez simple qui arrondit à la seconde près!
la source
C'est celui que j'ai écrit récemment pour MM: SS. Ce n'est pas exact à la question, mais c'est un format one-liner différent.
Edit: Cela a été ajouté pour plus de variété, mais la meilleure solution ici est https://stackoverflow.com/a/25279399/639679 ci-dessous.
la source