432 votes

Comment afficher une date JavaScript au format 12 heures AM/PM ?

Comment afficher un objet datetime JavaScript au format 12 heures (AM/PM) ?

3 votes

Ne perdez pas votre temps stackoverflow.com/a/17538193/3541385 ça marche

2 votes

@Ritesh WARNING: toLocaleTimeString() may behave differently based on region / location. Mesurez deux fois, coupez une fois.

0 votes

@AbandonedCart Est-ce que c'est vraiment un dicton ?

732voto

bbrame Points 2643
function formatAMPM(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? '0'+minutes : minutes;
  var strTime = hours + ':' + minutes + ' ' + ampm;
  return strTime;
}

console.log(formatAMPM(new Date));

4 votes

De plus, vous avez déclaré deux fois la variable "hours" mais avez fait de "strTime" un global accidentel. Ce n'est pas très élégant, mais cela semble être la bonne technique pour utiliser les méthodes natives.

0 votes

Bonjour, pouvez-vous m'expliquer ce que vous faites avec ceci : minutes = minutes < 10 ? '0'+minutes : minutes ;

3 votes

@Balz Si minutes est inférieur à 10 (par exemple 16:04), alors cette instruction ajoute la chaîne "0" de sorte que la sortie formatée est "4:04 PM" au lieu de "4:4 PM". Notez qu'au cours du processus, minutes passe du statut de nombre à celui de chaîne.

51voto

Mike Christensen Points 29735

Vous pouvez également envisager d'utiliser quelque chose comme date.js :

<html>
<script type="text/javascript" src="http://www.datejs.com/build/date.js"></script>

<script>
   (function ()
   {
      document.write(new Date().toString("hh:mm tt"));
   })();
</script>
</html>

48voto

Steve Tauber Points 962

Voici une façon d'utiliser les expressions rationnelles :

console.log(new Date('7/10/2013 20:12:34').toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3"))
console.log(new Date('7/10/2013 01:12:34').toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3"))

Cela crée 3 groupes de correspondance :

  • ([\d]+:[\d]{2}) - Heure:Minute
  • (:[\d]{2}) - Secondes
  • (.*) - l'espace et le point (Period est le nom officiel pour AM/PM)

Ensuite, il affiche les 1er et 3ème groupes.

ATTENTION : toLocaleTimeString() peut se comporter différemment selon la région ou l'emplacement.

3 votes

Les gens n'utilisent pas assez Regex. Cela a fonctionné pour moi sans ajouter la bibliothèque jquery/microsoftajax suggérée ci-dessus.

0 votes

Quelle serait l'expression rationnelle pour avoir un zéro de fin au début de l'heure s'il s'agit d'un chiffre unique ? Par exemple, dans votre premier exemple de 8:12 PM, ce serait 08:12 PM ?

1 votes

@404 c'est la même chose, ([\d]+:[\d]{2}) est la partie qui nous intéresse. Utilisez les deux points ( :) comme séparateur et nous voyons que la première partie est [\d]+ . Le plus signifie un ou plusieurs. Il s'agit donc de rechercher un ou plusieurs chiffres (y compris le zéro). Si vous deviez garantir qu'un zéro est présent, ce serait (0[\d]:[\d]{2}) . Il s'agit maintenant de chercher le 0 plus un autre chiffre, puis les deux points, puis le reste.

41voto

rattray Points 675

Si vous n'avez pas besoin d'imprimer les am/pm, j'ai trouvé ce qui suit agréable et concis :

var now = new Date();
var hours = now.getHours() % 12 || 12;  // 12h instead of 24h, with 12 instead of 0. 

Ceci est basé sur la réponse de @bbrame.

4 votes

@koolinc pour minuit, il affiche 12. Je ne suis pas sûr du comportement souhaité.

1 votes

Je me suis trompé. Dans mon pays, on utilise l'horloge de 24 heures, je ne connais donc pas très bien l'horloge de 12 heures. En effet, minuit correspond à 12 heures du matin.

4voto

Chris Laplante Points 18060

Vérifiez Datejs . Leurs formateurs intégrés peuvent le faire : http://code.google.com/p/datejs/wiki/APIDocumentation#toString

Il s'agit d'une bibliothèque très pratique, surtout si vous prévoyez de faire d'autres choses avec des objets de date.

0 votes

Des réponses comme " utiliser la bibliothèque X "ne sont pas utiles. Ils peuvent toutefois être utiles en tant que commentaires.

2 votes

@RobG : Comme vous pouvez le constater, cela fait un certain temps que j'ai écrit cette réponse. Je m'en rends compte maintenant.

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