web-dev-qa-db-fra.com

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 de le faire en utilisant le fichier .toLocaleTimeString () de Javascript?

Faire quelque chose comme ça:

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

affichera le temps de l'utilisateur avec chaque unité, par ex. actuellement, il affiche 15h39: 15 heures. Suis-je capable d'afficher cette même chaîne, sans les secondes? (par exemple, 15h39)

132
javadog36

Vous pouvez toujours définir les options, en fonction de ceci page vous pouvez définir, pour vous débarrasser des secondes, quelque chose comme ceci

var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

Pris en charge par Firefox, Chrome, IE9 + et Opera. Essayez-le sur la console de votre navigateur Web.

261
CJLopez

La valeur renvoyée par Date.prototype.toLocaleString dépend de la mise en œuvre, vous obtenez donc ce que vous obtenez. Vous pouvez essayer d’analyser la chaîne pour en supprimer quelques secondes, mais cela peut être différent d’un navigateur à l’autre; vous devez donc tenir compte de chaque navigateur utilisé.

Créer votre propre format, sans ambiguïté, n’est pas difficile avec les méthodes de date. Par exemple:

function formatTimeHHMMA(d) {
  function z(n){return (n<10?'0':'')+n}
  var h = d.getHours();
  return (h%12 || 12) + ':' + z(d.getMinutes()) + ' ' + (h<12? 'AM' :'PM');
}
9
RobG

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 une version IE (il s'agit de la marque unicode de gauche à droite).

Je suppose que si l'heure formatée contient quelque chose comme "XX: XX: XX", il doit alors s'agir de secondes et je supprime la dernière partie. Si je ne trouve pas ce modèle, rien n'est changé. Plutôt sûr, mais il y a un risque de laisser quelques secondes dans certaines circonstances étranges.

J'espère juste qu'il n'y a pas de paramètres régionaux qui changeraient l'ordre des parties d'heure formatées (par exemple, faites-le ss: mm: hh). Cette marque de gauche à droite me rend un peu nerveuse à 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 quitter le heure formatée avec secondes dans un tel cas.

1
ArturG

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/,' ');
1
karma

Avec les lieux:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})
1
Mickael Austoni