getMinutes () 0-9 - Comment afficher des nombres à deux chiffres?


136
var date = "2012-01-18T16:03";
var date = new Date(date);

console.log(date.getMinutes());
console.log(date.getMinutes().length)

Cela renvoie 3.

  1. Comment puis-je le faire retourner '03'?
  2. Pourquoi .lengthretourne- t-il indéfini?

J'ai essayé ceci, mais cela n'a pas fonctionné:

Si strlen == 1alorsnum = ('0' + num);


Juste pour additionner, le retour de .getMinutes()est un entier, vous ne pouvez pas accéder à .lengthpartir d'un entier. Pour ce faire (non recommandé pour les dates), il faut analyser le nombre en une chaîne, puis vérifier la longueur. Par exemple:date.getMinutes().toString().length
ViniciusPires le

Réponses:


276
var date = new Date("2012-01-18T16:03");

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );

2
Qu'est-ce <10?'0':''que cela veut dire?
user1063287

@ user1063287 c'est une déclaration if else en ligne
Aryeh Armon

5
@ user1063287 Cela signifie: "Si getMinutes () est inférieur à 10, renvoie un 0, s'il est supérieur, renvoie une chaîne vide.
Michael Giovanni Pumo


(condition? true: false) en PHP, vous pouvez omettre la déclaration vraie (condition?: false) dans JS que vous utiliseriez alors (condition || false) Opérateur ternaire en.wikipedia.org/wiki/Ternary_operation
llange

203

Oui, ces réponses ne sont pas géniales, même le meilleur post a été optimisé. Ici y'go, cross-browser et conversion int / string plus propre. De plus, mon conseil est de ne pas utiliser un nom de variable `` date '' avec du code comme date = Date(...)lorsque vous vous fiez beaucoup à la sensibilité à la casse de la langue (cela fonctionne, mais risqué lorsque vous travaillez avec du code serveur / navigateur dans différentes langues avec des règles différentes) . Donc, en supposant la date javascript dans un var current_date:

mins = ('0'+current_date.getMinutes()).slice(-2);

La technique consiste à prendre les 2 caractères les plus à droite (slice(-2))de «0» en préfixe de la valeur de chaîne de getMinutes(). Alors:

"0"+"12" -> "012".slice(-2) -> "12"

et

"0"+"1" -> "01".slice(-2) -> "01"

7
Elegant solution
Oldenborg

1
L'utilisation de la tranche (-2) est contre-intuitive, mais je l'aime bien.
ChrisFox

33

Un autre moyen court consiste à remplir les minutes avec un zéro non significatif en utilisant:

String(date.getMinutes()).padStart(2, "0");

Signification: Rendez la chaîne de deux caractères, si un caractère est manquant, définissez-le 0à cette position.

Voir la documentation sur str.padStart (targetLength, padString)


18

Fonction ES6 élégante pour formater une date en hh:mm:ss:

const leadingZero = (num) => `0${num}`.slice(-2);

const formatTime = (date) =>
  [date.getHours(), date.getMinutes(), date.getSeconds()]
  .map(leadingZero)
  .join(':');

12

Je voudrais fournir une solution plus soignée au problème si vous le permettez. La réponse acceptée est très bonne. Mais je l'aurais fait comme ça.

Date.prototype.getFullMinutes = function () {
   if (this.getMinutes() < 10) {
       return '0' + this.getMinutes();
   }
   return this.getMinutes();
};

Maintenant, si vous souhaitez utiliser ceci.

console.log(date.getFullMinutes());

10

Je suggère:

var minutes = data.getMinutes();
minutes = minutes > 9 ? minutes : '0' + minutes;

c'est un appel de fonction en moins. Il est toujours bon de penser à la performance. C'est aussi court;


4

vous devriez vérifier s'il est inférieur à 10 ... ne pas en rechercher la longueur, car il s'agit d'un nombre et non d'une chaîne


4

Une autre option:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);

J'aime cette solution, mais il semble que IE8 et les versions antérieures ne prennent pas en charge les nombres négatifs pour substr. w3schools.com/jsref/jsref_substr.asp
GtEx


3

.lengthn'est pas défini car getMinutesrenvoie un nombre, pas une chaîne. les nombres n'ont pas de lengthpropriété. Vous pourriez faire

var m = "" + date.getMinutes();

pour en faire une chaîne, puis vérifiez la longueur (vous voudriez vérifier length === 1, pas 0).


3

Les nombres n'ont pas de longueur, mais vous pouvez facilement convertir le nombre en chaîne, vérifier la longueur, puis ajouter le 0 si nécessaire:

var strMonth = '' + date.getMinutes ();
if (strMonth.length == 1) {
  strMonth = '0' + strMonth;
}

3

Je ne vois aucune réponse ES6 ici, je vais donc en ajouter une en utilisant le formatage StandardJS

// ES6 String formatting example
const time = new Date()
const tempMinutes = new Date.getMinutes()
const minutes = (tempMinutes < 10) ? `0${tempMinutes}` : tempMinutes

3

Je suppose que vous auriez besoin de la valeur sous forme de chaîne. Vous pouvez utiliser le code ci-dessous. Il retournera toujours vous donner les deux chiffres des minutes sous forme de chaîne.

var date = new Date(date);
var min = date.getMinutes();

if (min < 10) {
min = '0' + min;
} else {
min = min + '';
}
console.log(min);

J'espère que cela t'aides.


1

J'utilise généralement ce morceau de code:

var start = new Date(timestamp),
    startMinutes = start.getMinutes() < 10 ? '0' + start.getMinutes() : start.getMinutes();

Elle est assez similaire à la réponse acceptée @ogur mais ne concatène pas une chaîne vide dans le cas où 0 n'est pas nécessaire. Pas sûr que ce soit mieux. Juste une autre façon de le faire!


1

vous pouvez utiliser moment js:

moment(date).format('mm')

exemple : moment('2019-10-29T21:08').format('mm') ==> 08

j'espère que ça aide quelqu'un


très sympa quand on utilise de toute façon le moment, merci :-)
Nadine

0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

nouveau sur JS, donc cela a été très utile pour la plupart des personnes qui regardent ce problème nouveau aussi, c'est ainsi que je l'ai fait apparaître dans le div appelé "class =" min "

j'espère que ça aide quelqu'un


0

que dis-tu de ça? ça marche pour moi! :)

var d = new Date();
var minutes = d.getMinutes().toString().replace(/^(\d)$/, '0$1');

0

Une autre option pour obtenir des minutes ou des heures à deux chiffres.

var date = new Date("2012-01-18T16:03");

var minutes = date.toTimeString().slice(3, 5); 
var hours   = date.toTimeString().slice(0, 2); 


-2

Si vous utilisez AngularJS dans votre projet, injectez simplement $ filter et utilisez-le comme ici:

$filter('date')(value, 'HH:mm')

Vous pouvez également formater la sortie dans le modèle, plus d'informations sur les filtres ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.