Ich versuche, JS zu verwenden, um eine date object
in eine Zeichenkette in YYYYMMDD
Format. Gibt es einen einfacheren Weg als die Verkettung von Date.getYear()
, Date.getMonth()
y Date.getDay()
?
Antworten
Zu viele Anzeigen?Viele Antworten hier verwenden die Funktion toisostring. Diese Funktion wandelt die Zeit vor der Ausgabe in Zulu-Zeit um, was zu Problemen führen kann.
function datestring(time) {
return new Date(time.getTime() - time.getTimezoneOffset()*60000).toISOString().slice(0,10).replace(/-/g,"")
}
mydate = new Date("2018-05-03")
console.log(datestring(mydate))
Die Funktion datestring behebt das Problem der Zeitzonen, oder noch besser, Sie können das ganze Problem vermeiden, indem Sie in Zulu-Zeit arbeiten:
mydate = new Date("2018-05-03Z")
// mydate = new Date(Date.UTC(2018,5,3))
console.log(mydate.toISOString().slice(0,10).replace(/-/g,""))
Wenn Sie AngularJs (bis 1.5) verwenden, können Sie die Datumsfilter :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Datum-Kurzcode zur Rettung!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Hier ist ein allgemeinerer Ansatz, der beides ermöglicht Datum y Zeit Komponenten und ist entweder als Zahl oder als Zeichenkette identisch sortierbar.
Basierend auf der Zahlenreihenfolge des Date-ISO-Formats in eine lokale Zeitzone konvertieren und nicht vorhandene Ziffern entfernen, d.h.:
// 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
}
Verwendung
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"