J'essaie d'utiliser JS pour transformer un date object
en une chaîne au format YYYYMMDD
. Existe-t-il un moyen plus simple que de concaténer Date.getYear()
, Date.getMonth()
et Date.getDay()
?
Morceau de code altéré 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);
Cela vous donnera un format "aaaa-mm-jj".
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 de jQuery pour effectuer le travail comme suit:
$.datepicker.formatDate('yymmdd', new Date());
D'habitude, 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 plus d'exemples.
Il s'agit d'une seule ligne de code que vous pouvez utiliser pour créer une chaîne YYYY-MM-DD
de la date du jour.
var d = new Date().toISOString().slice(0,10);
En plus de la réponse de o-o, je vous recommande de séparer les opérations logiques du retour et de les placer sous forme de ternaires dans les variables.
Utilisez également concat()
pour assurer la concaténation sécurisée 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 DRY fiddle comme suggéré par RiZKiT
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'
Je n'aime pas modifier les objets natifs et je pense que la multiplication est plus claire que la chaîne qui remplit 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));
Solution Plain JS (ES5) sans aucun problème de saut de date provoqué par l’impression Date.toISOString () au format 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);
Une autre méthode consiste à utiliser toLocaleDateString
avec des paramètres régionaux dotés d'un format de format big-endian , tels que 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 chiffres non numériques:
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 sur une ligne pour obtenir la date de l'année
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Version un 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 corrige 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,"")
Ce mec ici => http://blog.stevenlevithan.com/archives/date-time-format a écrit une fonction format()
pour l'objet Date
de Javascript, afin qu'il puisse être utilisé avec des formats littéraux familiers.
Si vous avez besoin d'un formatage complet de la date dans le langage Javascript de votre application, utilisez-le. Sinon, si ce que vous voulez faire est unique, concaténer getYear (), getMonth (), getDay () est probablement le plus simple.
Il semble que mootools fournisse Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Je ne suis pas sûr que cela vaille la peine d’y inclure uniquement pour cette tâche particulière.
Que diriez-vous de Day.js ?
C'est seulement 2 Ko, et vous pouvez aussi dayjs().format('YYYY-MM-DD')
.
Répondre à un autre pour plus de simplicité et de lisibilité.
De plus, la modification 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);
J'utilise habituellement 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, nous pouvons ajouter "0" au jour ou au mois, et demander les deux derniers, car ce sont toujours les deux que nous voulons.
Donc, si MyDate.getMonth () renvoie 9, il sera:
("0" + "9") // Giving us "09"
donc ajouter. Slice (-2) sur 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 ajouter. Slice (-2) nous donne les deux derniers caractères, ou:
("0" + "10").slice(-2)
"10"
En travaillant à partir de la réponse de @ o-o, cela vous redonnera la chaîne de la date selon une chaîne de format. Vous pouvez facilement ajouter une regex année à 2 chiffres pour l'année et les millisecondes et autres, 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, en particulier parce qu'il utilise beaucoup de regex. Il pourrait probablement utiliser un travail que je ne maîtrise pas js pur.
Si vous utilisez AngularJs (jusqu’à 1,5), vous pouvez utiliser le filtre de dates :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
dateformat est un paquet très utilisé et je le trouve beaucoup plus robuste et facile à utiliser que moment.js .
Comment utiliser:
Téléchargez et installez dateformat
à partir de NPM. Exigez-le dans votre module:
var dateFormat = require('dateformat');
et ensuite formatez simplement vos fichiers:
var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
date-shortcode à la rescousse!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Javascript natif:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');
Voici une approche plus générique qui permet à la fois aux composants date et time et est identifiable comme un nombre ou une chaîne.
Selon l'ordre des nombres du format Date ISO, convertissez-le en fuseau horaire local et supprimez les chiffres non numériques. 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
}
tilisation
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"
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
La solution @ o-o ne fonctionne pas dans mon cas. Ma solution est la suivante:
Date.prototype.yyyymmdd = function() {
var mm = this.getMonth() + 1; // getMonth() is zero-based
var dd = this.getDate();
var ret = [this.getFullYear(), (mm<10)?'0':'', mm, (dd<10)?'0':'', dd].join('');
return ret; // padding
};
Voici une petite amélioration à 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
};
J'espère être utile pour tout le monde!
:)
J'essaie d'écrire une bibliothèque simple pour manipuler un objet de date JavaScript. Vous pouvez essayer ça.
var dateString = timeSolver.getString(date, "YYYYMMDD")
Bibliothèque ici: https://github.com/sean1093/timeSolver
Sympa et facile:
var date = new Date();
var yyyy = date.getFullYear();
var mm = date.getMonth() + 1; // getMonth() is zero-based
if (mm < 10) mm='0'+mm;
var dd = date.getDate();
if (dd < 10) dd='0'+dd;
/*date.yyyymmdd();*/
console.log('test - '+yyyy+'-'+mm+'-'+dd);
Pour obtenir la date locale, dans un format AAAAMMJJ, utilisez:
var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");
Try this:
function showdate () {
var a = new Date();
var b = a.getFullYear();
var c = a.getMonth();
(++c < 10)? c = "0" + c : c;
var d = a.getDate();
(d < 10)? d = "0" + d : d;
var final = b + "-" + c + "-" + d;
return final;
}
document.getElementById("todays_date").innerHTML = showdate();
Date.js a beaucoup de méthodes d'analyse de date utiles.
require("datejs")
(new Date()).toString("yyyyMMdd")
cet article m'a aidé à écrire cette aide, je la partage donc si quelqu'un recherche cette solution, elle prend en charge toutes les variantes de aaaa, mm, jj
Date.prototype.formattedDate = function (pattern) {
formattedDate = pattern.replace('yyyy', this.getFullYear().toString());
var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
mm = mm.length > 1 ? mm : '0' + mm;
formattedDate = formattedDate.replace('mm', mm);
var dd = this.getDate().toString();
dd = dd.length > 1 ? dd : '0' + dd;
formattedDate = formattedDate.replace('dd', dd);
return formattedDate;
};
d = new Date();
pattern = 'yyyymmdd'; // 20150813
d.formattedDate(pattern);
pattern = 'yyyy-mm-dd';
d.formattedDate(pattern); // 2015-08-13
J'espère que cette fonction sera utile
function formatDate(dDate,sMode){
var today = dDate;
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd = '0'+dd
}
if(mm<10) {
mm = '0'+mm
}
if (sMode+""==""){
sMode = "dd/mm/yyyy";
}
if (sMode == "yyyy-mm-dd"){
return yyyy + "-" + mm + "-" + dd + "";
}
if (sMode == "dd/mm/yyyy"){
return dd + "/" + mm + "/" + yyyy;
}
}
Vous pouvez créer vous-même la fonction ci-dessous
function toString(o, regex) {
try {
if (!o) return '';
if (typeof o.getMonth === 'function' && !!regex) {
let splitChar = regex.indexOf('/') > -1 ? '/' : regex.indexOf('-') > -1 ? '-' : regex.indexOf('.') > -1 ? '.' : '';
let dateSeparate = regex.split(splitChar);
let result = '';
for (let item of dateSeparate) {
let val = '';
switch (item) {
case 'd':
val = o.getDate();
break;
case 'dd':
val = this.date2Char(o.getDate());
break;
case 'M':
val = o.getMonth() + 1;
break;
case 'MM':
val = this.date2Char(o.getMonth() + 1);
break;
case 'yyyy':
val = o.getFullYear();
break;
case 'yy':
val = this.date2Char(o.getFullYear());
break;
default:
break;
}
result += val + splitChar;
}
return result.substring(0, result.length - 1);
} else {
return o.toString();
}
} catch(ex) { return ''; }
}
function concatDateToString(args) {
if (!args.length) return '';
let result = '';
for (let i = 1; i < args.length; i++) {
result += args[i] + args[0];
}
return result.substring(0, result.length - 1);
}
function date2Char(d){
return this.rightString('0' + d);
}
function rightString(o) {
return o.substr(o.length - 2);
}
Utilisé:
var a = new Date();
console.log('dd/MM/yyyy: ' + toString(a, 'dd/MM/yyyy'));
console.log('MM/dd/yyyy: ' + toString(a, 'MM/dd/yyyy'));
console.log('dd/MM/yy: ' + toString(a, 'dd/MM/yy'));
console.log('MM/dd/yy: ' + toString(a, 'MM/dd/yy'));
Bien sûr, vous pouvez créer une fonction spécifique pour chaque variante des représentations de chaînes de date. Si vous envisagez des formats de date internationaux, vous vous retrouvez avec des dizaines de fonctions spécifiques avec des noms rigoureux et difficiles à distinguer.
Il n'y a pas de fonction raisonnable qui correspond à tous les formats, mais une composition de fonction raisonnable qui:
const pipe2 = f => g => x =>
g(f(x));
const pipe3 = f => g => h => x =>
h(g(f(x)));
const invoke = (method, ...args) => o =>
o[method] (...args);
const padl = (c, n) => s =>
c.repeat(n)
.concat(s)
.slice(-n);
const inc = n => n + 1;
// generic format date function
const formatDate = stor => (...args) => date =>
args.map(f => f(date))
.join(stor);
// MAIN
const toYYYYMMDD = formatDate("") (
invoke("getFullYear"),
pipe3(invoke("getMonth")) (inc) (padl("0", 2)),
pipe2(invoke("getDate")) (padl("0", 2)));
console.log(toYYYYMMDD(new Date()));
Oui, cela fait beaucoup de code. Mais vous pouvez exprimer littéralement chaque représentation de date sous forme de chaîne en modifiant simplement les arguments de la fonction transmis à la fonction supérieure formatDate
. Tout est explicite et déclaratif, c’est-à-dire que vous pouvez presque lire ce qui se passe.