String in YYYYMMDD-formaat ophalen van JS-datumobject?

Ik probeer JS te gebruiken om een date objectom 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 toISOStringgebruiken:

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-DDreeks 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 toLocaleDateStringmet 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 dateformatvan 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')

Other episodes