1167 Stimmen

Formatiere JavaScript Datum als JJJJ-MM-TT

Ich habe ein Datum mit dem Format Sun May 11,2014. Wie kann ich es mit JavaScript in 2014-05-11 umwandeln?

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';

    return [d[0], d[1], d[2], d[3]].join(' ');
}

var datemilli = Date.parse('Sun May 11,2014');
console.log(taskDate(datemilli));

Der obige Code gibt mir dasselbe Datumsformat, sun may 11,2014. Wie kann ich das beheben?

1524voto

Darth Egregious Punkte 13720

Verwenden Sie einfach die integrierte Methode toISOString, um Ihr Datum im ISO-8601-Format zu erhalten:

let yourDate = new Date()
yourDate.toISOString().split('T')[0]

Wo yourDate Ihr Datumsobjekt ist.

Bearbeiten: @exbuddha schrieb dies, um die Zeitzone in den Kommentaren zu behandeln:

const offset = yourDate.getTimezoneOffset()
yourDate = new Date(yourDate.getTime() - (offset*60*1000))
return yourDate.toISOString().split('T')[0]

977voto

user3470953 Punkte 11135

Sie können folgendes tun:

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) 
        month = '0' + month;
    if (day.length < 2) 
        day = '0' + day;

    return [year, month, day].join('-');
}

console.log(formatDate('Sun May 11,2014'));

Beispiel zur Verwendung:

console.log(formatDate('Sun May 11,2014'));

Ausgabe:

2014-05-11

Demo auf JSFiddle: http://jsfiddle.net/abdulrauf6182012/2Frm3/

390voto

Juanma Menendez Punkte 12373

2020 ANTWORT

Sie können die native .toLocaleDateString() Funktion verwenden, die mehrere nützliche Parameter wie locale (um ein Format wie MM/DD/YYYY oder YYYY/MM/DD auszuwählen), timezone (um das Datum umzurechnen) und Formatdetails Optionen (z. B. 1 vs 01 vs January) unterstützt.

Beispiele

const testCases = [
  new Date().toLocaleDateString(), // 8/19/2020
  new Date().toLocaleString(undefined, {year: 'numeric', month: '2-digit', day: '2-digit', weekday:"long", hour: '2-digit', hour12: false, minute:'2-digit', second:'2-digit'}), // 'Wednesday, 14/06/2023, 13:43:57'
  new Date().toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'}), // 08/19/2020 (monat und tag mit zwei ziffern)
  new Date().toLocaleDateString('en-ZA'), // 2020/08/19 (jahr/monat/tag) beachten sie die unterschiedliche lokalität
  new Date().toLocaleDateString('en-CA'), // 2020-08-19 (jahr-monat-tag) beachten sie die unterschiedliche lokalität
  new Date().toLocaleString("en-US", {timeZone: "America/New_York"}), // 8/19/2020, 9:29:51 AM. (datum und uhrzeit in einer bestimmten zeitzone)
  new Date().toLocaleString("en-US", {hour: '2-digit', hour12: false, timeZone: "America/New_York"}),  // 09 (nur die stunde)
]

for (const testData of testCases) {
  console.log(testData)
}

Beachten Sie, dass Sie manchmal eine kompatible Lokalität mit Ihrem gewünschten Format finden müssen, um ein Datum in Ihrem spezifischen Wunschformat auszugeben. Sie können die Lokalitätsbeispiele hier finden: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocalestring_date_all

Bitte beachten Sie, dass locale nur das Format ändert. Wenn Sie ein bestimmtes Datum in die entsprechende Zeit eines bestimmten Landes oder einer bestimmten Stadt umwandeln möchten, müssen Sie den timezone Parameter verwenden.

389voto

Mitch3091 Punkte 4262

Ich benutze diese Methode, um das Datum im Format yyyy-mm-dd zu erhalten :)

var todayDate = new Date().toISOString().slice(0, 10);
console.log(todayDate);

231voto

John Slegers Punkte 41127

Der einfachste Weg, um Ihr Datum in das Format JJJJ-MM-TT umzuwandeln, ist folgendermaßen:

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

Wie es funktioniert:

  • new Date("Sun May 11,2014") konvertiert den String "Sun May 11,2014" in ein Datumobjekt, das die Zeit Sun May 11 2014 00:00:00 in einer Zeitzone basierend auf der aktuellen Lokalisierung (Systemeinstellungen des Hosts) darstellt
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 )) konvertiert Ihr Datum in ein Datumobjekt, das der Zeit Sun May 11 2014 00:00:00 in UTC (Standardzeit) entspricht, indem der Zeitzone-Offset abgezogen wird
  • .toISOString() konvertiert das Datumobjekt in einen ISO 8601 String 2014-05-11T00:00:00.000Z
  • .split("T") teilt den String in ein Array ["2014-05-11", "00:00:00.000Z"]
  • [0] nimmt das erste Element dieses Arrays

Demo

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

console.log(dateString);

Hinweis :

Der erste Teil des Codes (new Date(...)) muss möglicherweise ein wenig angepasst werden, wenn Ihr Eingabeformat von dem des OP abweicht. Wie mikeypie in den Kommentaren angemerkt hat, wenn der Datumsstring bereits im erwarteten Ausgabeformat vorliegt und die lokale Zeitzone westlich von UTC liegt, ergibt new Date('2022-05-18') in 2022-05-17. Und die Lokalisierung eines Benutzers (z.B. MM/DD/YYYY vs TT-MM-JJJJ) kann auch beeinflussen, wie ein Datum von new Date(...) analysiert wird. Also führen Sie einige ordentliche Tests durch, wenn Sie diesen Code für verschiedene Eingabeformate verwenden möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X