79 votes

Conversion de l'heure de 24 heures en heure de 12 heures avec AM et PM en utilisant Javascript

Quelle est la meilleure façon de convertir la valeur JSON suivante du format 24 heures au format 12 heures avec AM et PM ? La date doit rester la même - l'heure est la seule chose qui doit être formatée.

February 04, 2011 19:00:00

P.S. J'utilise jQuery si cela facilite les choses ! Je préférerais également une fonction/code simple et ne pas utiliser Date.js.

0 votes

Dans quel contexte voulez-vous l'utiliser ? Est-ce pour l'affichage ?

1 votes

137voto

TomTom Points 358

C'est ainsi que vous pouvez changer les heures sans l'instruction if :

hours = ((hours + 11) % 12 + 1);

5 votes

Excellent ! Mais, il manque la partie 'laconique' AM/PM. :)

30 votes

Excellente idée !!! var suffixe = heures >= 12 ? "PM" : "AM" ; hours = ((hours + 11) % 12 + 1) + suffixe ; Ceci ajoutera également AM/PM.

2 votes

Quelqu'un peut-il expliquer le calcul qui se cache derrière tout ça ?

72voto

aorcsik Points 7845

UPDATE 2 : sans option de secondes

UPDATE : AM après midi corrigé, testé : http://jsfiddle.net/aorcsik/xbtjE/

J'ai créé cette fonction pour faire cela :

function formatDate(date) {
  var d = new Date(date);
  var hh = d.getHours();
  var m = d.getMinutes();
  var s = d.getSeconds();
  var dd = "AM";
  var h = hh;
  if (h >= 12) {
    h = hh - 12;
    dd = "PM";
  }
  if (h == 0) {
    h = 12;
  }
  m = m < 10 ? "0" + m : m;

  s = s < 10 ? "0" + s : s;

  /* if you want 2 digit hours:
  h = h<10?"0"+h:h; */

  var pattern = new RegExp("0?" + hh + ":" + m + ":" + s);

  var replacement = h + ":" + m;
  /* if you want to add seconds
  replacement += ":"+s;  */
  replacement += " " + dd;

  return date.replace(pattern, replacement);
}

alert(formatDate("February 04, 2011 12:00:00"));

0 votes

Votre fonction affiche l'heure après midi comme "a.m." au lieu de "p.m.".

0 votes

Quelle est la meilleure façon de se débarrasser des secondes (pour n'afficher que 7:00 PM par exemple) ? Désolé, je n'ai pas été plus détaillé dans mon post original et mon JS est très minimal ! J'ai essayé d'enlever les '+s' mais cela ne fait qu'ajouter les secondes à la fin de AM/PM. Merci encore !

0 votes

@Slynthic Ajouté la partie pour activer/désactiver les secondes.

42voto

user1365977 Points 171
    //it is pm if hours from 12 onwards
    suffix = (hours >= 12)? 'pm' : 'am';

    //only -12 from hours if it is greater than 12 (if not back at mid night)
    hours = (hours > 12)? hours -12 : hours;

    //if 00 then it is 12 am
    hours = (hours == '00')? 12 : hours;

7voto

wloescher Points 1254

Voici une façon raisonnablement concise de le faire en utilisant un Prototype :

Date.prototype.getFormattedTime = function () {
    var hours = this.getHours() == 0 ? "12" : this.getHours() > 12 ? this.getHours() - 12 : this.getHours();
    var minutes = (this.getMinutes() < 10 ? "0" : "") + this.getMinutes();
    var ampm = this.getHours() < 12 ? "AM" : "PM";
    var formattedTime = hours + ":" + minutes + " " + ampm;
    return formattedTime;
}

Il ne vous reste plus qu'à convertir votre valeur de chaîne en date et à utiliser la nouvelle méthode :

var stringValue = "February 04, 2011 19:00:00;
var dateValue = new Date(stringValue);
var formattedTime = dateValue.getFormattedTime();

Ou en une seule ligne :

var formattedTime = new Date("February 04, 2011 19:00:00").getFormattedTime();

2 votes

J'aime bien celui-là, mais this.getMinutes() < 9 devrait être this.getMinutes() < 10.

5voto

Prafulla Points 566
function pad(num) {return ("0" + num).slice(-2);}
function time1() {
  var today = new Date(),
    h = today.getHours(),
    m = today.getMinutes(),
    s = today.getSeconds();

  h = h % 12;
  h = h ? h : 12; // the hour '0' should be '12'
  clk.innerHTML = h + ':' + 
    pad(m) + ':' + 
    pad(s) + ' ' + 
    (h >= 12 ? 'PM' : 'AM');
}
window.onload = function() {
  var clk = document.getElementById('clk');
  t = setInterval(time1, 500);
}

<span id="clk"></span>

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