Ich erstelle eine datetime-Zeichenfolge, die folgendermaßen aussieht: 2010-07-15 11:54:21
Und mit dem folgenden Code erhalte ich in Firefox ein ungültiges Datum, aber in Chrome funktioniert es einwandfrei
var todayDateTime = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + seconds;
var date1 = new Date(todayDateTime);
In Firefox gibt date1 mir ein ungültiges Datum, aber in Chrome funktioniert es einwandfrei. Was wäre die Hauptursache?
javascript
google-chrome
date
datetime
firefox
pixeldev
quelle
quelle
Antworten:
Sie können ein Datumsobjekt nicht wie gewünscht instanziieren. Es muss auf eine bestimmte Art und Weise sein. Hier sind einige gültige Beispiele:
oder
Chrome muss einfach flexibler sein.
Quelle: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Von Apsillers Kommentar:
Die EMCAScript-Spezifikation erfordert genau ein Datumsformat (dh JJJJ-MM-TTTHH: mm: ss.sssZ), aber benutzerdefinierte Datumsformate können von einer Implementierung frei unterstützt werden : " Wenn der String nicht diesem [ECMAScript-definierten] Format entspricht Die Funktion kann auf implementierungsspezifische Heuristiken oder implementierungsspezifische Datumsformate zurückgreifen. "Chrome und FF haben einfach unterschiedliche" implementierungsspezifische Datumsformate ".
quelle
YYYY-MM-DDTHH:mm:ss.sssZ
), aber benutzerdefinierte Datumsformate können von einer Implementierung frei unterstützt werden : " Wenn der String nicht diesem [ECMAScript-definierten] Format entspricht, kann die Funktion auf implementierungsspezifische Heuristiken oder implementierungsspezifische Datumsformate zurückgreifen. "Chrome und FF haben einfach unterschiedliche" implementierungsspezifische Datumsformate ".Dies funktioniert in allen Browsern -
Format: JJJJ-MM-TTTHH: mm: ss.sss
Details: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
quelle
Dies funktioniert auch in den meisten Browsern
Das ist das Format von
quelle
Option 1 :
Angenommen, Ihr Timestring hat ein Format, das folgendermaßen aussieht:
In diesem Fall können Sie einen einfachen regulären Ausdruck verwenden, um ihn zu konvertieren
ISO 8601
:Dies würde die folgende Ausgabe hervorrufen:
Dies ist das Standard-Datums- / Uhrzeitformat und wird daher von allen Browsern unterstützt:
Option 2 :
Angenommen, Ihr Timestring hat ein Format, das folgendermaßen aussieht:
Hier können Sie den folgenden regulären Ausdruck ausführen:
Auch dies erzeugt ein Format, das von allen Browsern unterstützt wird:
Option 3:
Angenommen, Sie haben eine Zeitzeichenfolge, die sich nicht einfach an einen der gut unterstützten Standards anpassen lässt.
In diesem Fall ist es am besten, Ihre Zeitzeichenfolge in verschiedene Teile aufzuteilen und sie als individuelle Parameter zu verwenden für
Date
:quelle
Wenn Sie weiterhin ein Datum mit Bindestrichen erstellen möchten, können Sie dieses Format verwenden:
Aber denken Sie daran, dass es laut UTC Zeit schafft. Das heißt, wenn Sie in der Zeitzone GMT + 3 (3 Stunden vor GMT) leben, wird dieser Zeitzonenversatz zur Zeit hinzugefügt. Das obige Beispiel hat also diesen Wert, wenn GMT + 3 (beachten Sie, dass es Stunde 20:00 und nicht 17:00 ist):
Stellen Sie sicher, dass Sie am Ende den Buchstaben "Z" hinzufügen, da Chrome und Firefox die Zeichenfolge andernfalls unterschiedlich analysieren (einer fügt den Zeitversatz hinzu und der andere nicht).
quelle
Bei der Arbeit mit AngularJS hatte ich sowohl in Firefox als auch in Safari ein ähnliches Problem. Wenn beispielsweise ein von Angular zurückgegebenes Datum folgendermaßen aussieht:
mit diesem Code:
Gibt einen ungültigen Datumsfehler in Firefox und Safari zurück. In Chrome funktioniert es jedoch einwandfrei. Wie in einer anderen Antwort angegeben, ist Chrome beim Parsen von Datumszeichenfolgen höchstwahrscheinlich nur flexibler.
Mein letztendliches Ziel war es, das Datum auf eine bestimmte Weise zu formatieren. Ich habe eine ausgezeichnete Bibliothek gefunden, die sowohl das Problem der Cross-Browser-Kompatibilität als auch das Problem der Datumsformatierung behandelt. Die Bibliothek heißt moment.js .
Mit dieser Bibliothek funktioniert der folgende Code in allen von mir getesteten Browsern ordnungsgemäß:
Wenn Sie bereit sind, diese zusätzliche Bibliothek in Ihre App aufzunehmen, können Sie Ihre Datumszeichenfolge einfacher erstellen und mögliche Probleme mit der Browserkompatibilität vermeiden. Als Bonus haben Sie eine gute Möglichkeit, Daten bei Bedarf einfach zu formatieren, hinzuzufügen, zu subtrahieren usw.
quelle
Dies sollte für Sie funktionieren:
Ich musste ein Datum aus einer Zeichenfolge erstellen, also habe ich es so gemacht:
Denken Sie daran, dass die Monate in Javascript zwischen 0 und 11 liegen. Daher sollten Sie den Monatswert wie folgt um 1 reduzieren:
quelle
Einfache Lösung, Dies funktioniert mit allen Browsern,
quelle
Eine Situation, in die ich geraten bin, war der Umgang mit Millisekunden. FF und IE analysieren diese Datumszeichenfolge nicht korrekt, wenn versucht wird, ein neues Datum zu erstellen.
"2014/11/24 17:38:20.177Z"
Sie wissen nicht, wie sie damit umgehen sollen.177Z
. Chrome wird jedoch funktionieren.quelle
In der Tat ist Chrome flexibler, um mit unterschiedlichen Zeichenfolgenformaten umzugehen. Auch wenn Sie das String-Format nicht kennen, kann Chrome String ohne Fehler erfolgreich in Datum konvertieren. So was:
Aber für Firefox und Safari werden die Dinge komplexer. In Firefox 'Dokument heißt es bereits: ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse )
Wenn Sie Date.parse in Firefox und Safari verwenden möchten , sollten Sie vorsichtig sein. Für mich benutze ich eine Trickmethode, um damit umzugehen. (Hinweis: Es ist möglicherweise nicht immer in allen Fällen korrekt.)
Hier wird zuerst 2013-08-08 11:52:18 UTC in 2013-08-08T11: 52: 18Z konvertiert , und dann werden die Wörter in Firefox 'Dokument angepasst . Zu diesem Zeitpunkt ist Date.parse in jedem Browser immer richtig.
quelle
Das hat bei mir funktioniert
Firefox
undChrome
:Viel Glück...
quelle
In Firefox wird jedes ungültige Datum als Datumsobjekt als Datum zurückgegeben
1899-11-29T19:00:00.000Z
. Überprüfen Sie daher, ob der Browser Firefox ist, und rufen Sie das Datumsobjekt der Zeichenfolge ab"1899-11-29T19:00:00.000Z".getDate()
. Vergleichen Sie es schließlich mit dem Datum.quelle
Ich habe das folgende Datumsformat verwendet und es funktioniert in allen Browsern.
quelle