596 votes

Javascript ajoute des zéros à la date

J'ai créé ce script pour calculer la date pour 10 jours à l'avance dans le format de dd/mm/yyyy :

var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();

J'ai besoin que la date apparaisse avec des zéros en tête sur le composant jour et mois en ajoutant ces règles au script. Je ne parviens pas à le faire fonctionner.

if (MyDate.getMonth < 10)getMonth = '0' + getMonth;

y

if (MyDate.getDate <10)get.Date = '0' + getDate;

Si quelqu'un pouvait me montrer où insérer ces éléments dans le script, je lui en serais très reconnaissant.

7 votes

Par convention, vous devez mettre en minuscule le premier caractère de vos noms de variables et réserver la casse camel aux objets/prototypes.

0 votes

Si le format AAAA-MM-JJ est acceptable, ce serait une très bonne réponse : stackoverflow.com/a/28431880/1717535

2 votes

Faites défiler la page vers le bas pour ES6+. padStart réponse

1627voto

user113716 Points 143363

Essayez ça : http://jsfiddle.net/xA5B7/

var MyDate = new Date();
var MyDateString;

MyDate.setDate(MyDate.getDate() + 20);

MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/'
             + ('0' + (MyDate.getMonth()+1)).slice(-2) + '/'
             + MyDate.getFullYear();

EDITAR:

Pour expliquer, .slice(-2) nous donne le dernier deux caractères de la chaîne.

Donc quoi qu'il en soit, on peut ajouter "0" au jour ou au mois, et demander simplement les deux derniers puisque ce sont toujours les deux que nous voulons.

Ainsi, si le MyDate.getMonth() renvoie à 9 il le sera :

("0" + "9") // Giving us "09"

en ajoutant .slice(-2) sur cela nous donne les deux derniers caractères qui sont :

("0" + "9").slice(-2)
"09"

Mais si MyDate.getMonth() renvoie à 10 il le sera :

("0" + "10") // Giving us "010"

en ajoutant .slice(-2) nous donne les deux derniers caractères, ou :

("0" + "10").slice(-2)
"10"

44 votes

Forked - format de date AAAA-MM-JJ jsfiddle.net/j6qJp/1 Cela peut être utile à quelqu'un. Merci

3 votes

Quelqu'un peut-il expliquer pourquoi cela est mieux que la réponse fournie par @Aleross ci-dessous ? Ce n'est pas immédiatement clair ce qu'il fait par rapport à la fonction pad qui est explicitement claire.

1 votes

Plus simple, utilisez myDate.toISOString() qui contient des zéros en tête. Extrayez les parties pertinentes à l'aide de substring.

126voto

Aleross Points 1258

Voici un exemple tiré du Documentation sur l'objet date sur le Mozilla Developer Network à l'aide d'une fonction "pad" personnalisée, sans avoir à étendre le prototype Number de Javascript. La fonction pratique qu'ils donnent en exemple est la suivante

function pad(n){return n<10 ? '0'+n : n}

Et ci-dessous, on le voit utilisé dans son contexte.

/* use a function for the exact format desired... */
function ISODateString(d){
    function pad(n){return n<10 ? '0'+n : n}
    return d.getUTCFullYear()+'-'
    + pad(d.getUTCMonth()+1)+'-'
    + pad(d.getUTCDate())+'T'
    + pad(d.getUTCHours())+':'
    + pad(d.getUTCMinutes())+':'
    + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z

4 votes

Très belle façon de faire. Je pense que la réponse acceptée est très bien, mais celle-ci est encore plus propre à mon avis.

2 votes

Cela pourrait conduire à des bogues inattendus car il sort une chaîne pour < 10 et un nombre pour >= 10

0 votes

@DavidFregoli, toutes ces fonctions de conversion de la date en chaîne renvoient une chaîne, donc si vous entrez une chaîne, pad ne produit que des chaînes de caractères.

12voto

kennebec Points 33886
Number.prototype.padZero= function(len){
 var s= String(this), c= '0';
 len= len || 2;
 while(s.length < len) s= c + s;
 return s;
}

//en cours d'utilisation :

(function(){
 var myDate= new Date(), myDateString;
 myDate.setDate(myDate.getDate()+10);

 myDateString= [myDate.getDate().padZero(),
 (myDate.getMonth()+1).padZero(),
 myDate.getFullYear()].join('/');

 alert(myDateString);
})()

/*  value: (String)
09/09/2010
*/

8voto

meaa Points 21
var MyDate = new Date();
var MyDateString = '';
MyDate.setDate(MyDate.getDate());
var tempoMonth = (MyDate.getMonth()+1);
var tempoDate = (MyDate.getDate());
if (tempoMonth < 10) tempoMonth = '0' + tempoMonth;
if (tempoDate < 10) tempoDate = '0' + tempoDate;
MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear();

6voto

Hellojeffy Points 49

Vous pouvez utiliser l'opérateur ternaire pour formater la date comme une instruction "if".

Par exemple :

var MyDate = new Date();
MyDate.setDate(MyDate.getDate()+10);
var MyDateString = (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) + '/' + ((d.getMonth()+1) < 10 ? '0' + (d.getMonth()+1) : (d.getMonth()+1)) + '/' + MyDate.getFullYear();

Alors

(MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate())

serait similaire à une instruction if, où si la fonction getDate() renvoie une valeur inférieure à 10, elle renvoie un '0' + la date, ou bien elle renvoie la date si elle est supérieure à 10 (puisque nous n'avons pas besoin d'ajouter le premier 0). Même chose pour le mois.

Edit : J'ai oublié que getMonth commence par 0, j'ai donc ajouté le +1 pour en tenir compte. Bien sûr, vous pourriez aussi dire simplement d.getMonth() < 9 :, mais j'ai pensé que l'utilisation du +1 aiderait à le rendre plus facile à comprendre.

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