11526 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
Je cherche à faire une fonction JavaScript qui réalise l'opération suivante :
Le paramètre est une chaîne de caractères numériques telle que
20220706232954
Cela doit être interprété comme 2022-07-06T21:29:54 heure UTC
Je voudrais convertir cette chaîne de caractères pour obtenir l'heure locale française, soit
06/07/2022 23:29:54
J'ai commencé par

function(data) {
    let infos = data.match(/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/);
    let Y = infos[1], m = infos[2], d = infos[3], H = infos[4], i = infos[5], s = infos[6];
    let utc = Date.UTC(Y, m, d, H, i, s);
   /* comment faire la suite ??? */
}

En général je fais ça côté serveur avec php DateTime, mais en JavaScript je suis perdu depuis 2 heures avec les différentes fonctions de date.
Pourriez vous me venir en aide ?
Merci
Modérateur
Bonjour/bonsoir,

par exemple (javascript n'est pas trop mon truc, ce n'est peut-être pas la meilleur methode) :
....
   /* comment faire la suite ??? */
  let ndate= new Date(utc ).toLocaleString();
   console.log(ndate);
....


infos ici si tu veut creuser : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString

Cdt


edit
code à tester
frdate("20220706232954");   //06/07/2022 23:29:54
function frdate(data) {
  let infos = data.match(/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/);
  let Y = infos[1],
    m = infos[2] - 1, // correction ??
    d = infos[3],
    H = infos[4] - 2, // correction ?
    i = infos[5],
    s = infos[6];
  let utc = Date.UTC(Y, m, d, H, i, s);
  /* comment faire la suite ??? */
  let ndate = new Date(utc).toLocaleString("fr-FR");
  console.log(ndate);
}
https://codepen.io/gc-nomade/pen/rNdxvbr?editors=1111
Modifié par gcyrillus (07 Jul 2022 - 01:56)
Merci de ta réponse mais ce n’est pas ce que je cherche.
Le 06/07/2022 23:29:54 UTC devrait afficher 07/07/2022 01/:29:54 car nous sommes en été et en France, donc 2h de plus. Si l’au lieu de juillet la date était en décembre c’est 1h de plus, en Angleterre ou au Portugal ce serait une heure de décalage en moins etc.
C’est toute cette complexité que je n’arrive pas à gérer.
Je sais ( ou du moins j’ai su Smiley cligne ) le faire en php.
Je crois que je vais plutôt essayer de traiter ça côté serveur s’il n’y a pas de solution simple en js
Bonne journée
J'ai trouvé une solution

function frDate(data) {
	let infos = data.match(/^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/);
	let Y = infos[1], 
            m = infos[2], 
            d = infos[3],  
            H = infos[4], 
            i = infos[5],  
            s = infos[6];
	return new Date(Date.UTC(Y, m, d, H, i, s)).toLocaleString();
        /* Date.UTC retourne un timestamp
            new Date(timestamp) retourne un objet Date JavaScript
            date.toLocaleString() retourne le bon format
       */
}

Si j'avais voulu un autre format, ça aurait demandé une dizaine de lignes de code en plus...
La gestion des dates en JavaScript, ça n'a pas vraiment évolué depuis la première version dans les années 1990.
Modifié par PapyJP (07 Jul 2022 - 09:20)
JavaScript travaille sur une meilleure API. En attendant il existe de superbes bibliothèques, telle que luxon.js.
Qui dit bibliothèque dit dépendance d'un fournisseur extérieur, ce que je n'aime pas suite à des expériences fâcheuses dans ce domaine, la plus importante actuellement étant Microsoft qui veut m'imposer Edge dont je ne veux pas et surtout Windows 11 dont un de mes amis a récemment essuyé les plâtres.
Tant que je n'en ai pas impérativement besoin, je préfère m'en passer.
Je ne suis pas sûr qu'on parle de la même chose... Mais ce n'est pas grave, ce qui compte c'est que tu t'y retrouves.
Chouette ! Un bug !
S’il n’y avait pas de bug dans un programme la vie serait triste Smiley smile
Merci je vais corriger ça.