Convertir heures en hh:mm:ss dans un array [Résolu]

Signaler
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
-
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
-
Bonjour, après avoir fait des recherches je suis à court d'idée et vous demande de l'aide.
En fait j'ai un tableau qui contient des heures:

array=["1:1:1","2:1:1",....]

Si l'heure, le minute et le seconde est supérieur à 9 alors j'obtient dd:mm:ss:
Exemple:

array=["10:20:30","12:10:20",....]

Mais si l'heure ou le minute ou la second est inférieur à 10 alors j'obtient d:m:s

Ce que je souhaite c'est d'obtenir un format dd:mm:ss même si l'heure est inférieur à 10
Exemple:

array=["01:00:00",02:00:00"]
Est ce que quelqu'un peut m'aider s'il vous plait. Merci d'avance.

6 réponses

Messages postés
32938
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 555
Bonjour,
ne serait-il pas plus simple de gérer ça lors du remplissage du premier tableau ?
D'où proviennent les données ?

Messages postés
32938
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 555
  var stringArray = new Array("1:3:12", "2:5:4", "3:1:1", "1:1:5");
  
  function formatHMS(arrDatas){
    var newArr = arrDatas.map(item => {
      let explodeItem = item.split(':');
      let newItem = explodeItem.map(elm=>{
        return parseInt(elm)<10 ? "0"+elm : elm;
      });
      return newItem.join(':');
    });
    return newArr;
  }
  
  formatHMS(stringArray);
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
3
Merci de m'avoir répondu, ce donnée vient d'un développeur que je n'ai pas accès malheureusement, je ne fais que le côté affichage. Tous ce que j'ai reçu c'est un tableau qui contient des données est doit être formaté en javascript afin d'obtenir le format hh:mm:ss

Voila le donnée que j'ai reçu:

"heure" => array:1 [▼
0 => array:1 [▼
0 => "3 : 38 : 41 "
]
Salut,
il suffit de passer par l'objet Date en créant un nouvel objet pour chaque date et en utilisant les méthodes de l'objet pour obtenir le format voulu.

Il faudra bien sûr faire ça pour chaque élément du tableau(avec une fonction par exemple) dans une boucle.
Sinon le plus pratique c'est d'utiliser un timestamp unix et convertir quand on en a besoin(pour afficher par exemple) parce que le timestamp unix est un nombre entier décimal donc nettement plus simple à manipuler pour les calculs et les tris éventuels(comparaison, obtenir les dates chronologiques etc...).

https://www.w3schools.com/js/js_dates.asp
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
3
Merci de m'avoir répondu on supposant que j'opte pour le timestamp comment est ce qu'on converti l'array afin de pouvoir le convertir dans le timestamp? voici mon code:
let unix_timestamp = 1549312452
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp * 1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();

// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
console.log(formattedTime);


est mon array:

array=["1:1:1","2:1:1",....]
C'est des milisecondes le timestamp depuis une date précise.
Il faut bien sûr prendre en compte que tu n'a qu'une heure et que l'objet Date est une date complète donc rajouter une "journée" arbitraire.
J'ai répondu un peu vite c'est plus simple si tu n'a qu'une heure sur 24 à gérer.

"Ce que je souhaite c'est d'obtenir un format dd:mm:ss même si l'heure est inférieur à 10 "

Donc rajouter un 0 devant si l'heure est inférieure à 10 et traiter l'ensemble en texte et non en nombre à partir de là.
Le tableau ne change rien sauf qu'il faut le faire pour chaque élément du tableau.
Bien sûr une fois en chaîne de caractère(string) faire des calculs et des comparaisons avec des chiffres n'est plus possible(ou plutôt pas très pratique il faudra convertir le texte en cahcune de ses valeurs par heure, minutes, secondes à chaque fois), donc il faut voir quelle est la finalité et utilisation de vos données.
Sinon tout convertir en millisecondes et rajouter une fonction pour afficher l'heure formatée pour l'afficher et garder la valeur numérique la plus pratique.

(1heure = 60minutes, 1minutes = 60secondes, 1seconde = 1000 ms)
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
3
J'ai déja éssaié avec ce methode
var stringArray = new Array("1", "2", "3", "5");

for (var i = 0; i < stringArray.length ; i++) 
{
    var ix=parseInt(stringArray[i]);
    var test=[];
  	console.log(ix);
  	if(stringArray[i]<10){
    	console.log("0"+ix);
    }
  
}


Avec ce tableau ca fonctionne très bien mais je suis toujours bloqué sur le façon de convertir si l'array est devenu des heures:

Par exemple si je met quelque chose du genre:

var stringArray = new Array("1:3:12", "2:5:4", "3:1:1", "1:1:5");
Alors je suis un peu perdu, pouvez vous m'illustrer cela avec un peu de ligne de code si possible. Encore merci.
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
3
Ca marche à la perfection, merci beaucoup , je suis vraiment content, vous êtes vraiment formidable. Je marque ce sujet comme résolu.