Page 1 of 1

Warum gibt Day.js „Ungültiges Datum“ für API-Datumszeichenfolgen mit Zeitzonenversätzen in iOS 15 (mPaaS) zurück?

Posted: 11 Jan 2025, 07:46
by Guest
Ich arbeite an einem Projekt mit dem Mini Program mPaaS-Framework von Alibaba Cloud und stoße auf ein Problem mit der Datumsanalyse in JavaScript. Insbesondere unter iOS 15 geben meine Datumszeichenfolgen (z. B. „10.01.2025 00:00:00.000+0700“) „Ungültiges Datum“ zurück. Ich vermute, dass dies auf strengere Parsing-Regeln in der WebKit-Engine zurückzuführen ist, die von der Miniprogrammumgebung verwendet wird. Hier ist mein Code...

Code: Select all

import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";

dayjs.extend(utc);
dayjs.extend(timezone);

function dateFormat(datetimeValue) {
let date = dayjs(datetimeValue);

if (!date.isValid() && typeof datetimeValue === "string") {
datetimeValue = datetimeValue.replace(" ", "T"); // Replace space with 'T'
date = dayjs(datetimeValue);
}

return date.format("YYYY-MM-DD HH:mm:ss.SSSZ");
}
Ich verarbeite Datumszeichenfolgen von einer API, zum Beispiel: „2025-01-10 00:00:00.000+0700“. Dieses Format funktioniert in den meisten Umgebungen, gibt jedoch in bestimmten Fällen „Ungültiges Datum“ zurück, insbesondere unter iOS 15.
Meine Fragen sind:
  • Warum kann Day.js diese Datumszeichenfolge in manchen Umgebungen nicht analysieren?
  • Ist das Ersetzen des Leerzeichens durch ein T ausreichend, um dieses Problem zu beheben?
  • Sollte ich den Zeitzonenversatz normalisieren (z. B. (07:00 bis +07:00)? Wenn ja, wie kann ich dies effektiv implementieren?
    Wie gehe ich am besten mit ungültigen Datumszeichenfolgen in Day.js um, insbesondere bei der Arbeit mit API-Daten?
    Ungültiges Datum
Ich verwende Day.js, um von einer API zurückgegebene Datumszeichenfolgen zu formatieren. Die API stellt Datumszeichenfolgen in diesem Format bereit: „2025-01-10 00:00:00.000+0700“. Mir ist aufgefallen, dass diese Zeichenfolgen dazu führen, dass Day.js ein ungültiges Datum zurückgibt, insbesondere unter iOS 15.
Um dies zu beheben, habe ich versucht, das Leerzeichen zwischen Datum und Uhrzeit durch ein
zu ersetzen

Code: Select all

datetimeValue = datetimeValue.replace(" ", "T");
Aber es wurde immer noch ein ungültiges Datum zurückgegeben
Ich habe erwartet, dass Day.js die Datumszeichenfolgen korrekt analysiert und es mir ermöglicht, sie in lesbare Formate wie „ zu formatieren. 1. Nov. 2023".
T:erwartetes Ergebnis