Ik probeer JS te gebruiken om een date object
om te zetten in een tekenreeks in de indeling YYYYMMDD
. Is er een eenvoudigere manier dan Date.getYear()
, Date.getMonth()
en Date.getDay()
samen te voegen?
Antwoord 1, autoriteit 100%
Gewijzigd stukje code dat ik vaak gebruik:
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();
Antwoord 2, autoriteit 53%
Ik vond het niet leuk om iets aan het prototype toe te voegen. Een alternatief zou zijn:
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;
Antwoord 3, autoriteit 31%
U kunt de functie toISOString
gebruiken:
var today = new Date();
today.toISOString().substring(0, 10);
Het geeft je een “jjjj-mm-dd” formaat.
Antwoord 4, autoriteit 22%
Moment.jskan je vriend zijn
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
Antwoord 5, Autoriteit 6%
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'
Antwoord 6, Autoriteit 6%
Dit is een enkele regel van code die u kunt gebruiken om een YYYY-MM-DD
reeks van de datum van vandaag te maken.
var d = new Date().toISOString().slice(0,10);
Antwoord 7, Autoriteit 6%
Als u geen Pure JS-oplossing nodig hebt, kunt u JQuery UI gebruiken om het werk als volgt te doen:
$.datepicker.formatDate('yymmdd', new Date());
Ik hou meestal niet van te veel bibliotheken te importeren. Maar JQuery UI is zo handig, je zult het waarschijnlijk ergens anders in je project gebruiken.
Bezoek http://api.jqueryui.com/datepicker/ voor meer voorbeelden
Antwoord 8, Autoriteit 4%
Ik hou niet van het modificeren van inheemse objecten, en ik denk dat vermenigvuldiging duidelijker is dan de tekenreeksvulling de geaccepteerde oplossing.
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));
Antwoord 9, Autoriteit 4%
Naast het antwoord van O-O zou ik graag willen aanbevelen om logische operaties van de terugkeer te scheiden en deze in plaats daarvan als ternaries in de variabelen te plaatsen.
Gebruik ook concat()
om veilige aaneenschakeling van variabelen te garanderen
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>
Antwoord 10, Autoriteit 3%
Gewone JS (ES5)-oplossing zonder mogelijke datumsprongproblemen veroorzaakt door Date.toISOString()-afdrukken in 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, '');
Dit in reactie op de opmerking van @weberste op het antwoord van @Pierre Guilbert.
Antwoord 11, autoriteit 3%
Lokale tijd:
var date = new Date();
date = date.toJSON().slice(0, 10);
UTC-tijd:
var date = new Date().toISOString();
date = date.substring(0, 10);
datum wordt vandaag 15-06-2020 afgedrukt terwijl ik dit schrijf.
De methode
toISOString() retourneert de datum met de ISO-standaard die YYYY-MM-DDTHH:mm:ss.sssZ
is
De code bevat de eerste 10 tekens die we nodig hebben voor een JJJJ-MM-DD-indeling.
Als u een indeling zonder ‘-‘ wilt, gebruik dan:
var date = new Date();
date = date.toJSON().slice(0, 10).split`-`.join``;
In .join“ kun je spatie, punten of wat je maar wilt toevoegen.
Antwoord 12, autoriteit 2%
// 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
Antwoord 13
Een andere manier is om toLocaleDateString
met een landinstelling met een big-endian datumformaat standaard, zoals Zweden, Litouwen, Hongarije, Zuid-Korea, …:
date.toLocaleDateString('se')
Om de scheidingstekens (-
) te verwijderen, hoeft u alleen de niet-cijfers te vervangen:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Antwoord 14
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
Antwoord 15
dateformatis een veelgebruikt pakket.
Hoe te gebruiken:
Download en installeer dateformat
van NPM. Vereist het in uw module:
const dateFormat = require('dateformat');
en formatteer dan gewoon je spullen:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Antwoord 16
U kunt eenvoudig deze code van één regel gebruiken om de datum in het jaar te krijgen
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Antwoord 17
Deze man hier => http://blog.stevenlevithan.com/archives/date-time-formatheeft een format()
-functie geschreven voor het Date
-object van Javascript, zodat het kan worden gebruikt met bekende letterlijke formaten.
Als u volledige datumnotatie nodig heeft in het Javascript van uw app, gebruik deze dan. Als u anders een eenmalig iets wilt doen, is het waarschijnlijk het gemakkelijkst om getYear(), getMonth(), getDay() samen te voegen.
Antwoord 18
Kortste
.toJSON().slice(0,10).split`-`.join``;
Antwoord 19
Beetje vereenvoudigde versie voor het meest populaire antwoord in deze thread 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;
}
Antwoord 20
Deze code is aangepast aan het antwoord van Pierre Guilbert:
(het werkt zelfs na 10000 jaar)
YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
Antwoord 21
Hoe zit het met Day.js?
Het is maar 2 KB, en je kunt ook dayjs().format('YYYY-MM-DD')
.
https://github.com/iamkun/dayjs
Antwoord 22
Gebruik padStart:
Date.prototype.yyyymmdd = function() {
return [
this.getFullYear(),
(this.getMonth()+1).toString().padStart(2, '0'), // getMonth() is zero-based
this.getDate().toString().padStart(2, '0')
].join('-');
};
Antwoord 23
[day,,month,,year]= Intl.DateTimeFormat(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(new Date()),year.value+month.value+day.value
of
new Date().toJSON().slice(0,10).replace(/\/|-/g,'')
Antwoord 24
Als je werkt vanuit het antwoord van @o-o, krijg je de string van de datum terug volgens een format string. U kunt eenvoudig een 2-cijferige jaarregex toevoegen voor het jaar & milliseconden en dergelijke als je ze nodig hebt.
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);
Ik weet echter niet hoe efficiënt dat is, vooral qua prestaties omdat het veel regex gebruikt. Het kan waarschijnlijk wat werk gebruiken dat ik pure js niet onder de knie heb.
NB: ik heb de voorgedefinieerde klassedefinitie behouden, maar je zou die volgens best practices in een functie of een aangepaste klasse kunnen zetten.
Antwoord 25
Ik gebruik meestal de onderstaande code wanneer ik dit moet doen.
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
Om uit te leggen, .slice(-2) geeft ons de laatste twee karakters van de string.
Dus wat er ook gebeurt, we kunnen “0” toevoegen aan de dag of maand, en gewoon om de laatste twee vragen, want dat zijn altijd de twee die we willen.
Dus als de MyDate.getMonth() 9 retourneert, is het:
("0" + "9") // Giving us "09"
dus het toevoegen van .slice(-2) geeft ons de laatste twee karakters, namelijk:
("0" + "9").slice(-2)
"09"
Maar als date.getMonth() 10 retourneert, is het:
("0" + "10") // Giving us "010"
dus het toevoegen van .slice(-2) geeft ons de laatste twee tekens, of:
("0" + "10").slice(-2)
"10"
Antwoord 26
Een ander beantwoorden voor Simplicity & leesbaarheid.
Ook wordt het bewerken van bestaande vooraf gedefinieerde klasleden met nieuwe methoden niet aangemoedigd:
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);
Antwoord 27
Het lijkt erop dat mootools Date().format()
biedt: https://mootools.net/more/docs/1.6.0/Types/Date
Ik weet echter niet zeker of het de moeite waard is om het alleen voor deze specifieke taak op te nemen.
Antwoord 28
Vanaf ES6 kun je sjabloonreeksen gebruiken om het iets korter te maken:
var now = new Date();
var todayString = `${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`;
Deze oplossing is geen nulpad. Kijk naar de andere goede antwoorden om te zien hoe je dat kunt doen.
Antwoord 29
Als je het niet erg vindt, inclusief een extra (maar kleine) bibliotheek, suiker.js biedt veel leuke functionaliteit Voor het werken met Datums in JavaScript.
Om een datum te formatteren, gebruikt u de formaat functie:
new Date().format("{yyyy}{MM}{dd}")
ANTWOORD 30
Als u Angularjs (tot 1,5) gebruikt, kunt u de datumfilter :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')