250 votes

Comment utiliser .toLocaleTimeString() sans afficher les secondes ?

J'essaie actuellement d'afficher l'heure de l'utilisateur sans afficher les secondes. Existe-t-il un moyen d'y parvenir en utilisant la fonction .toLocaleTimeString() de Javascript ?

Faire quelque chose comme ça :

var date = new Date();
var string = date.toLocaleTimeString();

affichera l'heure de l'utilisateur avec chaque unité, par exemple, il affiche actuellement 3:39:15 PM. Puis-je afficher la même chaîne, mais sans les secondes (par exemple 3:39 PM) ?

5voto

Marathon55 Points 1836

Avec date et sans indication 0 pour une heure :

let d = new Date(2022, 2, 21, 7, 45, 0);
let s = d.toLocaleString([], { dateStyle: 'short', timeStyle: 'short' });
console.log(s);
// '2/21/22, 7:45 AM'

Cette fonction est prise en charge par tous les navigateurs modernes.

4voto

ag. Points 136

J'ai également cherché une solution à ce problème, voici ce que j'ai finalement trouvé :

function getTimeStr() {
    var dt = new Date();
    var d = dt.toLocaleDateString();
    var t = dt.toLocaleTimeString();
    t = t.replace(/\u200E/g, '');
    t = t.replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2');
    var result = d + ' ' + t;
    return result;
}

Vous pouvez l'essayer ici : http://jsfiddle.net/B5Zrx/

\u200E est un caractère de formatage que j'ai vu sur certaines versions d'IE (c'est une marque unicode de gauche à droite).

Je suppose que si l'heure formatée contient quelque chose comme "XX:XX:XX", alors il doit s'agir d'une heure avec des secondes et je supprime la dernière partie, si je ne trouve pas ce modèle, rien n'est modifié. C'est assez sûr, mais il y a un risque de laisser des secondes dans certaines circonstances bizarres.

J'espère simplement qu'il n'y a pas de paramètres locaux qui changeraient l'ordre des parties de l'heure formatées (par exemple en faisant ss:mm:hh). Cette marque de gauche à droite me rend un peu nerveux à ce sujet, c'est pourquoi je ne supprime pas la marque de droite à gauche ( \u202E ) - Je préfère ne pas trouver de correspondance dans ce cas et laisser l'heure formatée en secondes dans ce cas.

-3voto

karma Points 560

Vous pouvez essayer ceci, qui fonctionne pour mes besoins.

var d = new Date();
d.toLocaleTimeString().replace(/:\d{2}\s/,' ');

ou

d.toLocaleString().replace(/:\d{2}\s/,' ');

-4voto

koanima Points 549

Voici une fonction qui le fera, avec des commentaires explicatifs :

  function displayNiceTime(date){
    // getHours returns the hours in local time zone from 0 to 23
    var hours = date.getHours()
    // getMinutes returns the minutes in local time zone from 0 to 59
    var minutes =  date.getMinutes()
    var meridiem = " AM"

    // convert to 12-hour time format
    if (hours > 12) {
      hours = hours - 12
      meridiem = ' PM'
    }
    else if (hours === 0){
      hours = 12
    }

    // minutes should always be two digits long
    if (minutes < 10) {
      minutes = "0" + minutes.toString()
    }
    return hours + ':' + minutes + meridiem
  }

Étant donné que, comme d'autres l'ont fait remarquer, toLocaleTimeString() peut être implémenté différemment dans différents navigateurs, cette méthode permet un meilleur contrôle.

Pour en savoir plus sur l'objet Date en Javascript, voici une bonne ressource : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

-5voto

Frank Eastes Points 3

Je pense qu'il est facile de répondre à la question initiale en utilisant un élément qui a été négligé jusqu'à présent : une simple division de chaîne. Le temps retourné est une chaîne de texte, il suffit de la diviser sur le délimiteur " :" et de réassembler la chaîne comme vous le souhaitez. Pas de plug-in, pas de script compliqué, et voilà :

var myVar=setInterval(function(){myTimer()},1000);

function myTimer() {
    var d = new Date();
    currentNow = d.toLocaleTimeString();
    nowArray = currentNow.split(':');
    filteredNow = nowArray[0]+':'+nowArray[1];
    document.getElementById("demo").innerHTML = filteredNow;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X