J'essaie d'utiliser JS pour transformer date object
une chaîne en YYYYMMDD
format. Est - il un moyen plus facile que concaténer Date.getYear()
, Date.getMonth()
et Date.getDay()
?
J'essaie d'utiliser JS pour transformer date object
une chaîne en YYYYMMDD
format. Est - il un moyen plus facile que concaténer Date.getYear()
, Date.getMonth()
et Date.getDay()
?
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();
[1]
par .length===2
, car un indexeur sur une chaîne n'est pas entièrement pris en charge. Voir cette réponse pour les raisons.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
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;
rightNow
variable, vous pouvez envelopper new Date
et tout récupérer en une seule ligne:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
, donc je l'ai fait: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Assez simple, mais devrait être encapsulé.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Vous pouvez utiliser la toISOString
fonction:
var today = new Date();
today.toISOString().substring(0, 10);
Il vous donnera un format "aaaa-mm-jj".
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Si vous n'avez pas besoin d'une solution JS pure, vous pouvez utiliser l'interface utilisateur jQuery pour effectuer le travail comme ceci:
$.datepicker.formatDate('yymmdd', new Date());
Je n'aime généralement pas importer trop de bibliothèques. Mais jQuery UI est si utile que vous l'utiliserez probablement ailleurs dans votre projet.
Visitez http://api.jqueryui.com/datepicker/ pour plus d'exemples
Il s'agit d'une seule ligne de code que vous pouvez utiliser pour créer une YYYY-MM-DD
chaîne de la date du jour.
var d = new Date().toISOString().slice(0,10);
toISOString()
donnera 2015-12-31T22: 00: 00 GMT +0 (deux heures avant).
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'
new Date('Sun Mar 31 2019 00:00:00.000').toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
En plus de la réponse de oo, je voudrais recommander de séparer les opérations logiques du retour et de les mettre en tant que ternaires dans les variables.
Aussi, utilisez 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 yyyymmdd = this.yyyymmdd();
var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
return "".concat(yyyymmdd).concat(hh).concat(min);
};
Date.prototype.yyyymmddhhmmss = function() {
var yyyymmddhhmm = this.yyyymmddhhmm();
var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
return "".concat(yyyymmddhhmm).concat(ss);
};
var d = new Date();
document.getElementById("a").innerHTML = d.yyyymmdd();
document.getElementById("b").innerHTML = d.yyyymmddhhmm();
document.getElementById("c").innerHTML = d.yyyymmddhhmmss();
<div>
yyyymmdd: <span id="a"></span>
</div>
<div>
yyyymmddhhmm: <span id="b"></span>
</div>
<div>
yyyymmddhhmmss: <span id="c"></span>
</div>
("00" + (this.getDate())).slice(-2)
pour obtenir les chiffres à deux chiffres. Il n'y a aucune instruction "if" ou "?:", Et moins d'appels à la fonction .getX (). Si ce n'est pas un peu plus vite, c'est au moins plus lisible.
Je n'aime pas modifier les objets natifs, et je pense que la multiplication est plus claire que la chaîne remplissant 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));
.replace('-', '')
pour qu'il réponde à la question de l'OP), alors que vous étiez fidèle à la question d'origine de l'OP et qu'il ne nécessiterait pas cette étape supplémentaire. Excellent!
Solution JS simple (ES5) sans aucun problème de saut de date possible causé par l'impression Date.toISOString () 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.
toISOString
renvoyer plusieurs tirets successifs?
// 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);
new Date()
crée un nouvel objet date qui est juste un wrapper autour de nr. de ms depuis 1970/01/01 00: 00: 00.000 UTC. Ensuite , toISOString
imprime dans le fuseau horaire local.
Une autre façon est d'utiliser toLocaleDateString
avec un environnement local qui a une norme de format de date big-endian , comme la Suède, la Lituanie, la Hongrie, la Corée du Sud, ...:
date.toLocaleDateString('se')
Pour supprimer les délimiteurs ( -
), il suffit 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.
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();
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;
}
dateformat est un package très utilisé.
Comment utiliser:
Téléchargez et installez à dateformat
partir de NPM. Exigez-le dans votre module:
const dateFormat = require('dateformat');
puis formatez simplement vos trucs:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Ce gars ici => http://blog.stevenlevithan.com/archives/date-time-format a écrit une format()
fonction pour JavascriptDate
objet , donc 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 unique, la concaténation de getYear (), getMonth (), getDay () est probablement la plus simple.
En travaillant à partir de la réponse de @ oo, cela vous rendra la chaîne de la date selon une chaîne de format. Vous pouvez facilement ajouter une expression régulière à 2 chiffres pour l'année et les millisecondes et ainsi de suite 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 cependant pas à quel point c'est efficace, surtout en termes de performances car il utilise beaucoup d'expressions régulières. Il pourrait probablement utiliser certains travaux que je ne maîtrise pas en pure js.
Il semble que mootools fournit Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Je ne sais pas si cela vaut la peine d'inclure uniquement pour cette tâche particulière.
J'utilise généralement le code ci-dessous lorsque je dois 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, .slice (-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 demander simplement les deux derniers puisque ce sont toujours les deux que nous voulons.
Donc, si MyDate.getMonth () renvoie 9, ce sera:
("0" + "9") // Giving us "09"
donc l'ajout de .slice (-2) qui nous donne les deux derniers caractères qui est:
("0" + "9").slice(-2)
"09"
Mais si date.getMonth () renvoie 10, ce sera:
("0" + "10") // Giving us "010"
donc l'ajout de .slice (-2) nous donne les deux derniers caractères, ou:
("0" + "10").slice(-2)
"10"
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é.
De plus, la modification des 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);
Que diriez-vous de Day.js ?
C'est seulement 2 Ko, et vous pouvez aussi dayjs().format('YYYY-MM-DD')
.
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 des composants de date et d' heure et qui peut être triée de manière identique sous forme de nombre ou de chaîne.
En fonction de l'ordre numérique du format Date ISO, convertissez-le en fuseau horaire local et supprimez 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
}
Usage
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,'');