Ich muss Datums- / Zeitwerte konvertieren.

Zum Beispiel möchte ich dieses "2019-11-21 09:53:10 Etc/GMT" in einen Wert mit demselben Format wie dieses "2020-02-13T15:24:47.977Z" konvertieren.

Wenn Sie den resultierenden äquivalenten Wert des angegebenen Beispiels angeben können, kann ich diesen als Referenz verwenden, damit ich bereits den richtigen Code für die Konvertierung finde.

Wenn Sie den genauen Javascript-Code für die Konvertierung angeben können, ist dies besser. Ich benutze 'Moment' und 'Moment-Zeitzone'.

-2
d_air 19 Feb. 2020 im 19:06

4 Antworten

Beste Antwort

Sie müssen nur Ihre Datumszeichenfolge in diesem Format übergeben 2019 11 21 09:53:10 GMT

let date = new Date('2019 11 21 09:53:10 GMT');
console.log(date.toISOString());
0
Nitesh Phadatare 19 Feb. 2020 im 16:54

Probieren Sie dies aus

 var d = new Date(); 
 var n = d.toUTCString();

Eine Referenz finden Sie hier https: // www .geeksforgeeks.org / wie man ein Javascript-Datum in utc konvertiert /

-1
eboakyegyau 19 Feb. 2020 im 16:11

Wie von Nitesh in seiner Antwort kommentiert, ist Etc / GMT dasselbe wie GMT, wenn der Offset Null oder GMT + 0 ist. Wenn ich dies am Anfang bemerkt habe, habe ich diese Frage möglicherweise nicht gestellt.

Ich habe Folgendes versucht und sie ergeben "2019-11-21T09: 53: 10.000Z".

    let date1 = new Date('2019 11 21 09:53:10 GMT+0');
    console.log(date1.toISOString());

    let date2 = new Date('2019 11 21 09:53:10 GMT');
    console.log(date2.toISOString());

    let date3 = new Date('11/21/2019 09:53:10 GMT+0000');
    console.log(date3.toISOString());

    let date4 = new Date('11/21/2019 09:53:10 GMT');
    console.log(date4.toISOString());

Die Konvertierung funktioniert nicht, wenn ich meinen ursprünglichen Beispielwert verwende, der '-' und 'Etc /' enthält.

Das Folgende führt auch zu "2019-11-21T09: 53: 10Z".

    let date5 = moment.tz("2019-11-21 09:53:10", "Etc/GMT+0");
    console.log(date5.format());

    let date6 = moment.tz("2019-11-21 09:53:10", "Etc/GMT+0");
    console.log(date6.utc().format());

    let date7 = moment.tz("2019-11-21 09:53:10", "Etc/GMT");
    console.log(date7.format());

    let date8 = moment.tz("2019-11-21 09:53:10", "Etc/GMT");
    console.log(date8.utc().format());

Ich habe keine Lösung gefunden, die den ursprünglichen Wert nicht ändert. Daher muss ich zuerst den ursprünglichen Wert ändern, bevor ich das Date-Objekt erstellen kann.

    let a = "2019-11-21 09:53:10 Etc/GMT";  // sample value
    let b = a.replace(/-/g, " ").replace("Etc/", ""); // result: "2019 11 21 09:53:10 GMT"
    let c = new Date(b);
    console.log(c.toISOString()); // 2019-11-21T09:53:10.000Z

Alternativ ist es für mich auch akzeptabel, kein neues Date-Objekt zu erstellen.

    let d = "2019-11-21 09:53:10 Etc/GMT";  // sample value
    let b = d.replace(" Etc/GMT", "Z").replace(" ", "T"); // result: "2019-11-21T09:53:10Z"
    console.log(b); 
0
d_air 19 Feb. 2020 im 21:37

"2019-11-21 09:53:10 Etc / GMT" ist kein von ECMA-262 unterstütztes Format, daher ist das Parsen implementierungsabhängig und kann nicht als zuverlässig angesehen werden, z. in Safari:

new Date("2019-11-21 09:53:10 Etc/GMT");

Gibt ein ungültiges Datum zurück.

Wenn Sie nur "2019-11-21 09:53:10 Etc / GMT" in ein gültiges ISO 8601-Format konvertieren möchten, das auch von ECMA-262 unterstützt wird, ist überhaupt kein Date-Objekt erforderlich. Formatieren Sie es einfach neu die Saite leicht.

let timestamp = '2019-11-21 09:53:10 Etc/GMT'
let iso = timestamp.substr(0, 19).replace(' ','T') + 'Z';

console.log(iso);

// or more tolerant of time part
let timestamp2 = '2019-11-21 09:53:10.123 Etc/GMT'
console.log( timestamp2.replace(' ','T').replace(/ Etc.*$/,'Z') );

// Or
console.log( timestamp2.split(' ').slice(0,2).join('T') + 'Z');

// Or
let [d, t, rest] = timestamp2.split(' ');
console.log(`${d}T${t}Z`);

Es gibt viele Möglichkeiten, die Zeichenfolge neu zu formatieren, ohne sie in ein Datum und zurück in eine Zeichenfolge umzuwandeln. Natürlich, wenn Sie eine Zeichenfolge haben wie:

'2019-11-21 09:53:10 Etc/GMT-4'

Dann müssen Sie es manuell analysieren, um UTC zu erhalten, da "Etc / GMT" -Versätze den entgegengesetzten Sinn zu üblichen Versätzen haben (d. h. sie sind + ve West und -ve Ost).

1
RobG 20 Feb. 2020 im 11:38