Ich versuche, JS zu verwenden, um a date object
in einen String im YYYYMMDD
Format umzuwandeln. Gibt es einen einfacheren Weg , als verketten Date.getYear()
, Date.getMonth()
und Date.getDay()
?
Ich versuche, JS zu verwenden, um a date object
in einen String im YYYYMMDD
Format umzuwandeln. Gibt es einen einfacheren Weg , als verketten Date.getYear()
, Date.getMonth()
und Date.getDay()
?
Antworten:
Geänderter Code, den ich oft benutze:
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]
mit .length===2
, weil ein Indexer auf einer Schnur nicht vollständig unterstützt. Siehe diese Antwort aus Gründen warum.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
Ich mochte es nicht, den Prototyp zu ergänzen. Eine Alternative wäre:
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 nicht benötigen , können new Date
Sie sie in einer einzigen Zeile (new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
, also tat ich Folgendes : var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Ziemlich einfach, sollte aber gekapselt werden.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Sie können die toISOString
Funktion verwenden:
var today = new Date();
today.toISOString().substring(0, 10);
Sie erhalten ein "JJJJ-MM-TT" -Format.
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Wenn Sie keine reine JS-Lösung benötigen, können Sie die jQuery-Benutzeroberfläche folgendermaßen ausführen:
$.datepicker.formatDate('yymmdd', new Date());
Normalerweise importiere ich nicht gerne zu viele Bibliotheken. Die jQuery-Benutzeroberfläche ist jedoch so nützlich, dass Sie sie wahrscheinlich an einer anderen Stelle in Ihrem Projekt verwenden werden.
Weitere Beispiele finden Sie unter http://api.jqueryui.com/datepicker/
Dies ist eine einzelne Codezeile, mit der Sie eine YYYY-MM-DD
Zeichenfolge mit dem heutigen Datum erstellen können .
var d = new Date().toISOString().slice(0,10);
toISOString()
2015-12-31T22: 00: 00 GMT +0 (zwei Stunden zuvor) angezeigt wird .
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');
Zusätzlich zu oos Antwort möchte ich empfehlen, logische Operationen von der Rückgabe zu trennen und sie stattdessen als ternäre Dateien in die Variablen einzufügen.
Verwenden Sie concat()
diese Option auch, um eine sichere Verkettung von Variablen zu gewährleisten
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)
, um die Zahlen zweistellig zu erhalten. Es gibt keine "if" - oder "?:" - Anweisung und weniger Aufrufe der Funktion .getX (). Wenn nicht ein bisschen schneller, ist es zumindest besser lesbar.
Ich mag es nicht, native Objekte zu ändern, und ich denke, die Multiplikation ist klarer als die Zeichenfolge, die die akzeptierte Lösung auffüllt.
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('-', '')
, damit es die Frage des OP beantwortet), während Sie der ursprünglichen Frage des OP treu waren und es diesen zusätzlichen Schritt nicht erfordern würde. Ausgezeichnet!
Einfache JS (ES5) -Lösung ohne mögliche Probleme mit dem Datumssprung, die durch das Drucken von Date.toISOString () in UTC verursacht werden:
var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');
Dies als Antwort auf den Kommentar von @ weberste zur Antwort von @Pierre Guilbert.
toISOString
mehrere aufeinanderfolgende Bindestriche zurückgegeben werden?
// 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()
Erstellt ein neues Datumsobjekt, das nur ein Wrapper um nr ist. von ms seit 1970/01/01 00: 00: 00.000 UTC. Dann toISOString
druckt in lokaler Zeitzone aus.
Eine andere Möglichkeit ist die Verwendung toLocaleDateString
mit einem Gebietsschema, das einen Big-Endian-Datumsformatstandard aufweist , z. B. Schweden, Litauen, Ungarn, Südkorea, ...:
date.toLocaleDateString('se')
Um die Trennzeichen ( -
) zu entfernen, müssen nur die nicht Ziffern ersetzt werden:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Dies hat nicht den potenziellen Fehler, den Sie bei UTC-Datumsformaten erhalten können: Das UTC-Datum kann im Vergleich zum Datum in der lokalen Zeitzone einen Tag frei haben.
Sie können einfach diesen einen Zeilencode verwenden, um das Datum im Jahr zu erhalten
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Etwas vereinfachte Version für die beliebteste Antwort in diesem 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;
}
Datumsformat ist ein sehr verwendetes Paket.
Wie benutzt man:
dateformat
Von NPM herunterladen und installieren . Benötigen Sie es in Ihrem Modul:
const dateFormat = require('dateformat');
und dann formatiere einfach deine Sachen:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Dieser Typ hier => http://blog.stevenlevithan.com/archives/date-time-format hat eine format()
Funktion für das Javascript geschriebenDate
Objekt geschrieben, damit es mit bekannten Literalformaten verwendet werden kann.
Wenn Sie eine Datumsformatierung mit vollem Funktionsumfang im Javascript Ihrer App benötigen, verwenden Sie diese. Andernfalls ist es wahrscheinlich am einfachsten, getYear (), getMonth (), getDay () zu verketten, wenn Sie eine einmalige Aktion ausführen möchten.
Wenn Sie anhand der Antwort von @ oo arbeiten, erhalten Sie die Zeichenfolge des Datums gemäß einer Formatzeichenfolge zurück. Sie können ganz einfach einen zweistelligen Jahresregex für das Jahr und die Millisekunden und dergleichen hinzufügen, wenn Sie diese benötigen.
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);
Ich weiß jedoch nicht, wie effizient das ist, besonders wenn es um Perfektion geht, da es viel Regex verwendet. Es könnte wahrscheinlich etwas Arbeit gebrauchen, die ich nicht beherrsche.
Es scheint, dass mootools Folgendes bietet Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Ich bin mir nicht sicher, ob es sich lohnt, nur für diese spezielle Aufgabe aufzunehmen.
Normalerweise verwende ich den folgenden Code, wenn ich dies tun muss.
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
Zur Erklärung gibt .slice (-2) die letzten beiden Zeichen der Zeichenfolge an.
Egal was passiert, wir können dem Tag oder Monat "0" hinzufügen und einfach nach den letzten beiden fragen, da dies immer die beiden sind, die wir wollen.
Wenn also MyDate.getMonth () 9 zurückgibt, ist dies:
("0" + "9") // Giving us "09"
Wenn Sie also .slice (-2) hinzufügen, erhalten Sie die letzten beiden Zeichen:
("0" + "9").slice(-2)
"09"
Wenn date.getMonth () jedoch 10 zurückgibt, ist dies:
("0" + "10") // Giving us "010"
Wenn Sie also .slice (-2) hinzufügen, erhalten Sie die letzten beiden Zeichen oder:
("0" + "10").slice(-2)
"10"
Wenn Sie AngularJs (bis zu 1,5) verwenden, können Sie den Datumsfilter verwenden :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Beantwortung eines anderen für Einfachheit und Lesbarkeit.
Es wird auch nicht empfohlen, vorhandene vordefinierte Klassenmitglieder mit neuen Methoden zu bearbeiten:
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);
Wie wäre es mit Day.js ?
Es ist nur 2 KB, und Sie können auch dayjs().format('YYYY-MM-DD')
.
Wenn es Ihnen nichts ausmacht, eine zusätzliche (aber kleine) Bibliothek einzuschließen, bietet Sugar.js viele nützliche Funktionen für die Arbeit mit Datumsangaben in JavaScript. Verwenden Sie zum Formatieren eines Datums die Formatierungsfunktion :
new Date().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));
Datums-Shortcode zur Rettung!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Hier ist ein allgemeinerer Ansatz, der sowohl Datum als auch Uhrzeit zulässt Komponenten und ist identisch sortierbar entweder als Zahl oder ein String.
Konvertieren Sie basierend auf der Nummernreihenfolge des Datums-ISO-Formats in eine lokale Zeitzone und entfernen Sie nicht Ziffern. dh:
// 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
}
Verwendungszweck
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"
Native Javascript:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');