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()
?
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();
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;
Vous pouvez utiliser la fonction toISOString:
var today = new Date();
today.toISOString().substring(0, 10);
Il vous donnera un format "AAAA-MM-JJ".
Un instant.js pourrait être votre ami
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
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
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);
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
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));
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'
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.
// 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
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
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;
}
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,"")
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();
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.
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.
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.
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.
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"
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');
Si vous utilisez AngularJs (jusqu'à 1,5), vous pouvez utiliser le filtre de date:
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
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);
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
Date-shortcode à la rescousse!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
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"
JavaScript Natif:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');
Que diriez-vous de jour.js ?
C'est seulement 2KB, et vous pouvez aussi dayjs().format('YYYY-MM-DD')
.
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!
:)