Obtenir une chaîne au format AAAAMMJJ à partir de l'objet JS date?

J'essaie d'utiliser JS pour transformer un date object en une chaîne au format YYYYMMDD. Y a-t-il un moyen plus facile que de concaténer Date.getYear(), Date.getMonth(), et Date.getDay()?

302
demandé sur Simpal Kumar 2010-06-18 04:54:12

30 réponses

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();
532
répondu o-o 2016-11-24 11:03:07

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;
263
répondu Pierre Guilbert 2018-06-08 04:10:53

Vous pouvez utiliser la fonction toISOString:

var today = new Date();
today.toISOString().substring(0, 10);

Il vous donnera un format "AAAA-MM-JJ".

143
répondu Ramzi SAYAGH 2017-12-13 07:26:30

Un instant.js pourrait être votre ami

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
100
répondu High6 2017-06-13 07:35:23

Si vous n'avez pas besoin d'une solution js pure, vous pouvez utiliser L'interface utilisateur jQuery pour faire le travail comme ceci:

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

Je n'aime généralement pas importer trop de bibliothèques. Mais L'interface utilisateur jQuery est si utile, vous l'utiliserez probablement ailleurs dans votre projet.

Visite http://api.jqueryui.com/datepicker/ pour plus d'exemples

33
répondu NLemay 2013-12-18 21:46:05

C'est une seule ligne de code que vous pouvez utiliser pour créer un YYYY-MM-DD chaîne de la date d'aujourd'hui.

var d = new Date().toISOString().slice(0,10);
31
répondu Brian Powell 2016-03-16 22:23:29

En plus de la réponse de o-o, je voudrais recommander de séparer les opérations logiques du retour et de les placer comme ternaires dans les variables à la place.

Utilisez également concat() pour assurer une concaténation sûre des variables

 Date.prototype.yyyymmdd = function() {
   var yyyy = this.getFullYear();
   var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
   var dd  = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
   return "".concat(yyyy).concat(mm).concat(dd);
  };

 Date.prototype.yyyymmddhhmm = function() {
   var yyyy = this.getFullYear();
   var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
   var dd  = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min);
  };

 Date.prototype.yyyymmddhhmmss = function() {
   var yyyy = this.getFullYear();
   var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
   var dd  = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min).concat(ss);
  };

var d = new Date();
d.yyyymmdd();
d.yyyymmddhhmm();
d.yyyymmddhhmmss();

Un peu plus de violon sec comme suggéré par RiZKiT

Https://jsfiddle.net/EricHerlitz/tuhhfxz9/

23
répondu Eric Herlitz 2017-01-23 11:41:04

Je n'aime pas modifier les objets natifs, et je pense que la multiplication est plus claire que la chaîne de remplissage de 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/

16
répondu D-Money 2014-06-13 22:30:53
new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'
16
répondu gongqj 2016-06-06 03:11:06

Solution js (ES5) simple sans problèmes de saut de date possibles causés par la Date.toisostring () impression en UTC:

var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');

Ceci en réponse au commentaire de @ weberste sur la réponse de @Pierre Guilbert.

13
répondu Dormouse 2018-08-15 14:40:42

// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509

// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509
9
répondu Kus 2015-08-12 01:38:22

var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);
8
répondu Tomas Šivickas 2015-04-23 13:06:45

Version peu simplifiée pour la réponse la plus populaire dans ce fil https://stackoverflow.com/a/3067896/5437379 :

function toYYYYMMDD(d) {
    var yyyy = d.getFullYear().toString();
    var mm = (d.getMonth() + 101).toString().slice(-2);
    var dd = (d.getDate() + 100).toString().slice(-2);
    return yyyy + mm + dd;
}
5
répondu Hero Qu 2017-05-23 12:10:34

Ce code est corrigé à la réponse de Pierre Guilbert:

(cela fonctionne même après 10000 ans)

YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
5
répondu anmml 2016-09-17 00:33:06

Vous pouvez simplement utiliser ce code d'une ligne pour obtenir la date de l'année

var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
5
répondu Muhammad Ahsan 2017-06-28 10:37:46

Ce gars ici = > http://blog.stevenlevithan.com/archives/date-time-format a écrit une fonction format() pour L'objet Date du Javascript, de sorte qu'il peut être utilisé avec des formats littéraux familiers.

Si vous avez besoin d'un formatage de Date complet dans le Javascript de votre application, utilisez-le. Sinon, si ce que vous voulez faire est un one off, alors concaténer getYear(), getMonth(), getDay() est probablement plus facile.

4
répondu Strelok 2010-06-18 01:05:42

Une autre façon est d'utiliser toLocaleDateString avec une locale qui a un Format de date big-endian standard , Comme La Suède, La Lituanie, La Hongrie, la Corée du Sud,...:

date.toLocaleDateString('se')

Pour supprimer les délimiteurs (-) est juste une question de remplacer les non-chiffres:

console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );

Cela n'a pas l'erreur potentielle que vous pouvez obtenir avec les formats de date UTC: la date UTC peut être un jour de congé par rapport à la date dans le fuseau horaire local.

4
répondu trincot 2016-10-29 11:49:14

Il semble que Mootools fournissent Date ().format (): http://mootools.net/docs/more/Native/Date

Je ne suis pas sûr si cela vaut la peine d'inclure juste pour cette tâche particulière cependant.

3
répondu Oren_H 2010-06-18 01:08:11

En travaillant à partir de la réponse de @o-o, cela vous rendra la chaîne de la date selon une chaîne de format. Vous pouvez facilement ajouter une regex d'année à 2 chiffres pour l'année et les millisecondes et si vous en avez besoin.

Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    return format;
};

d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);

Je ne sais pas à quel point c'est efficace, surtout parce qu'il utilise beaucoup de regex. Il pourrait probablement utiliser un peu de travail que je ne maîtrise pas js pur.

3
répondu Tom Toms 2015-06-25 21:12:58

J'utilise habituellement le code ci-dessous quand j'ai besoin de le faire.

var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written

Pour expliquer, .tranche(-2) nous donne les deux derniers caractères de la chaîne.

Donc, peu importe quoi, nous pouvons ajouter "0" au jour ou au mois, et simplement demander les deux derniers puisque ce sont toujours les deux que nous voulons.

Donc, si le MyDate.getMonth() renvoie 9, ce sera:

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

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

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

"09"

Mais si date.getmonth () renvoie 10, il être:

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

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

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

"10"
3
répondu Ogglas 2015-09-18 13:23:56

Dateformat est très utilisé paquet et je trouve ça beaucoup plus robuste et plus facile à utiliser que moment.js .

Comment utiliser:

Téléchargez et installez dateformat depuis NPM. Besoin dans votre module:

var dateFormat = require('dateformat');

Et puis formatez simplement vos trucs:

var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');

3
répondu Milkncookiez 2016-04-25 09:48:41

Si vous utilisez AngularJs (jusqu'à 1,5), vous pouvez utiliser le filtre de date:

var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
3
répondu sarin 2017-05-02 17:29:38

Si cela ne vous dérange pas d'inclure une bibliothèque supplémentaire (mais petite), Sucre.js offre beaucoup de fonctionnalités pour travailler avec dates en JavaScript. Pour formater une date, utilisez la fonction format :

new Date().format("{yyyy}{MM}{dd}")
2
répondu andersh 2014-06-19 20:17:41

Répondre à un autre pour la simplicité et la lisibilité.
En outre, l'édition de membres de classe prédéfinis existants avec de nouvelles méthodes n'est pas encouragée:

function getDateInYYYYMMDD() {
    let currentDate = new Date();

    // year
    let yyyy = '' + currentDate.getFullYear();

    // month
    let mm = ('0' + (currentDate.getMonth() + 1));  // prepend 0 // +1 is because Jan is 0
    mm = mm.substr(mm.length - 2);                  // take last 2 chars

    // day
    let dd = ('0' + currentDate.getDate());         // prepend 0
    dd = dd.substr(dd.length - 2);                  // take last 2 chars

    return yyyy + "" + mm + "" + dd;
}

var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);
2
répondu Manohar Reddy Poreddy 2017-11-09 09:33:42

yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
2
répondu Enam 2018-01-13 22:04:12

Date-shortcode à la rescousse!

const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
2
répondu Kodie Grantham 2018-03-04 18:49:55

Voici une approche plus générique qui permet à la fois les composants date et time et peut être triée de manière identique en tant que nombre ou chaîne.

En fonction de l'ordre numérique du format ISO de la Date, convertir en un fuseau horaire local et supprimer les non-chiffres. c'est à dire:

// monkey patch version
Date.prototype.IsoNum = function (n) {
    var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
    return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}

L'Utilisation de

var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8));  // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum());   // "20150728150253272"
1
répondu chriskelly 2015-09-26 12:33:32

JavaScript Natif:

new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');
1
répondu Lonnie Best 2017-11-14 21:20:35

Que diriez-vous de jour.js ?

C'est seulement 2KB, et vous pouvez aussi dayjs().format('YYYY-MM-DD').

Https://github.com/iamkun/dayjs

1
répondu NoobTW 2018-07-24 08:53:20

Voici une petite amélioration de la réponse de https://stackoverflow.com/users/318563/o-o

Date.prototype.ddmmyyyy = function(delimiter) {
    var yyyy = this.getFullYear().toString();
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
    var dd  = this.getDate().toString();
    return (dd[1]?dd:"0"+dd[0]) + delimiter + (mm[1]?mm:"0"+mm[0]) + delimiter +yyyy  ; // padding
};

Espérons être utile pour tout le monde!

:)

0
répondu Ismael Terreno 2015-03-05 19:00:15