538 votes

Obtenir une chaîne au format AAAAMMJJ à partir d'un objet date JS ?

J'essaie d'utiliser JS pour transformer un fichier date object en une chaîne de caractères dans YYYYMMDD format. Existe-t-il un moyen plus simple que de concaténer Date.getYear() , Date.getMonth() y Date.getDay() ?

7 votes

Il faut concaténer ces trois-là.

7 votes

Si vous voulez une chaîne qui sera analysée à la même date, n'oubliez pas d'incrémenter le mois. Pour correspondre à votre spécification, vous devez également remplacer les chiffres uniques du mois et de la date par des '0'.

708voto

o-o Points 1240

Morceau de code modifié que j'utilise souvent :

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();

18 votes

Vous devez remplacer [1] avec .length===2 parce qu'un indexeur sur une chaîne de caractères n'est pas entièrement pris en charge. Voir cette réponse pour en connaître les raisons.

8 votes

Var mm = (this.getMonth() + 101).toStrung().substring(0, 2) ;

9 votes

Pour ceux qui veulent un exemple pratique de la correction de @Aidiakapi, j'ai créé un fiddle ici : jsfiddle.net/pcr8xbt5/1

391voto

Pierre Guilbert Points 392

Je n'ai pas aimé ajouter au prototype. Une alternative serait :

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;

65 votes

Si vous n'avez pas besoin de la rightNow vous pouvez enrouler la variable new Date et récupérer le tout en une seule ligne : (new Date()).toISOString().slice(0,10).replace(/-/g,"")

9 votes

Je voulais YYYYMMDDHHmmSSsss alors j'ai fait ça : var ds = (new Date()).toISOString().replace(/[^0-9]/g, ""); . Plutôt simple, mais devrait être encapsulé.

86 votes

Cela ne fonctionnera pas en général car Date.toISOString() crée une date formatée en UTC et peut donc sauter des frontières de date en fonction du fuseau horaire. Par exemple, en GMT+1 : (new Date(2013,13, 25)).toISOString() == '2013-12-24T23:00:00.000Z'.

40voto

NLemay Points 696

Si vous n'avez pas besoin d'une solution purement JS, vous pouvez utiliser jQuery UI pour faire le travail comme ceci :

$.datepicker.formatDate('yymmdd', new Date());

En général, je n'aime pas importer trop de bibliothèques. Mais jQuery UI est tellement utile que vous l'utiliserez probablement ailleurs dans votre projet.

Visitez http://api.jqueryui.com/datepicker/ pour d'autres exemples

33voto

D-Money Points 362

Je n'aime pas modifier les objets natifs, et je pense que la multiplication est plus claire que le remplissage de la chaîne de caractères la solution acceptée.

function yyyymmdd(dateIn) {
  var yyyy = dateIn.getFullYear();
  var mm = dateIn.getMonth() + 1; // getMonth() is zero-based
  var dd = dateIn.getDate();
  return String(10000 * yyyy + 100 * mm + dd); // Leading zeros for mm and dd
}

var today = new Date();
console.log(yyyymmdd(today));

Violon : http://jsfiddle.net/gbdarren/Ew7Y4/

4 votes

Cette réponse a été déclassée, et je ne sais pas pourquoi. Je pense que les mathématiques sont plus rapides et plus claires que la manipulation de chaînes de caractères. Si quelqu'un sait pourquoi cette réponse est mauvaise, qu'il me le fasse savoir.

4 votes

Le multiplicateur 10000 est là pour décaler à gauche l'AAAA de 4 places (les chiffres du mois et du jour ont besoin de 2 chiffres chacun) et n'a rien à voir avec le bogue Y10K. J'aime cette réponse et elle mérite le respect !

1 votes

Merci pour cette réponse J'ai créé le fiddle ici jsfiddle.net/amwebexpert/L6j0omb4

3voto

Oren_H Points 526

Il semble que mootools fournit Date().format() : https://mootools.net/more/docs/1.6.0/Types/Date

Je ne suis pas sûr que cela vaille la peine de l'inclure juste pour cette tâche particulière.

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