alert(new Date('2010-11-29'));
chrome, ff hat damit keine probleme, aber safari schreit "ungültiges datum". Warum ?
edit: ok, gemäß den Kommentaren unten habe ich String-Parsing verwendet und Folgendes versucht:
alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari
Bearbeiten 22. März 2018 : Scheint, als ob die Leute immer noch hier landen - heute würde ich moment
oder verwenden date-fns
und damit fertig sein. Date-fns ist sehr schmerzfrei und auch leicht.
javascript
date
safari
Shrinath
quelle
quelle
Antworten:
Das Muster
yyyy-MM-dd
ist kein offiziell unterstütztes Format fürDate
Konstruktoren. Firefox scheint dies zu unterstützen, aber rechnen Sie nicht damit, dass andere Browser dasselbe tun.Hier sind einige unterstützte Zeichenfolgen:
DateJS scheint eine gute Bibliothek zum Parsen von nicht standardmäßigen Datumsformaten zu sein.
Bearbeiten : gerade ECMA-262 Standard überprüft . Zitat aus Abschnitt 15.9.1.15:
Datum Uhrzeit Zeichenfolgenformat
Es scheint also, dass JJJJ-MM-TT im Standard enthalten ist, aber aus irgendeinem Grund unterstützt Safari dies nicht.
Update : Nachdem Sie sich die Dokumentation von datejs angesehen haben, sollte Ihr Problem mit folgendem Code gelöst werden:
quelle
Für mich ist die Implementierung einer neuen Bibliothek, nur weil Safari sie nicht richtig ausführen kann, zu viel und ein regulärer Ausdruck ist übertrieben. Hier ist der Oneliner :
quelle
Ich hatte ein ähnliches Problem.
Date.Parse("DATESTRING")
arbeitete unter Chrome (Version 59.0.3071.115), aber nicht unter Safari (Version 10.1.1 (11603.2.5)).Safari:
Chrom:
Die Lösung, die für mich funktioniert hat, war das Ersetzen des Leerzeichens im dateString durch
"T"
. (Beispiel:dateString.replace(/ /g,"T")
)Safari:
Chrom:
Beachten Sie, dass die Antwort vom Safari-Browser 8 Stunden (28800000 ms) weniger ist als die Antwort im Chrome-Browser, da Safari die Antwort in der lokalen TZ zurückgegeben hat (8 Stunden hinter UTC).
Um beide Zeiten in derselben TZ zu bekommen
Safari:
Chrom:
quelle
new Date(year, month, date, hours, minutes, seconds, milliseconds)
Konstruktor verwenden. Analysieren Sie das Zeichenfolgendatum in ein Array seiner Komponenten, um diese Komponenten im Konstruktor zu verwenden. @nizantz Es wäre großartig, wenn Sie glauben, dass ein solches Beispiel zu Ihrer Antwort hinzugefügt werden könnte.dateString.replace(/ /g,"T")
magische Codezeile hat von mir aus funktioniert. :)Ich nutze den Moment, um das Problem zu lösen. Beispielsweise
quelle
Damit eine Lösung in den meisten Browsern funktioniert, sollten Sie Ihr Datumsobjekt in diesem Format erstellen
z.B:
funktioniert gut mit IE, FF, Chrome und Safari. Auch ältere Versionen.
IE Dev Center: Datumsobjekt (JavaScript)
Mozilla Dev Network: Datum
quelle
String in Date fromat konvertieren (Sie müssen die Zeitzone des Servers kennen)
Dabei ist +08: 00 = Zeitzone vom Server
quelle
Ich hatte das gleiche Problem. Dann habe ich Moment verwendet. Js .Problem ist verschwunden.
z.B
quelle
Obwohl Sie vielleicht hoffen, dass Browser ISO 8601 (oder Teilmengen davon nur mit Datum) unterstützen, ist dies nicht der Fall. Alle mir bekannten Browser (zumindest in den von mir verwendeten US / English-Gebietsschemas) können das schreckliche US-
MM/DD/YYYY
Format analysieren .Wenn Sie bereits über die Teile des Datums verfügen, können Sie stattdessen Date.UTC () verwenden . Wenn Sie dies nicht tun, aber das
YYYY-MM-DD
Format verwenden müssen, empfehle ich, einen regulären Ausdruck zu verwenden, um die Ihnen bekannten Teile zu analysieren und sie dann an weiterzugebenDate.UTC()
.quelle
Verwenden Sie das folgende Format, es würde auf allen Browsern funktionieren
// Ihre Ausgabe würde folgendermaßen aussehen "Mi 23 Mrz 2016 00:00:00 GMT + 0530 (IST)"
// Beachten Sie, dass dies in diesem Fall in der aktuellen Zeitzone liegt, die mit IST bezeichnet ist, um in eine UTC-Zeitzone zu konvertieren, die Sie einschließen können
// Ihre Ausgabe möchte jetzt "Di, 22 Mar 2016 18:30:00 GMT"
Beachten Sie, dass jetzt das DatumObj die Uhrzeit im GMT-Format anzeigt. Beachten Sie auch, dass Datum und Uhrzeit entsprechend geändert wurden.
Die Funktion "toUTCSting" ruft die entsprechende Zeit am Greenwich-Meridian ab. Dies wird erreicht, indem der Zeitunterschied zwischen Ihrer aktuellen Zeitzone und der Greenwich-Meridian-Zeitzone ermittelt wird.
Im obigen Fall betrug die Zeit vor der Konvertierung am 23. März 2016 00:00 Stunden und Minuten. Nach der Konvertierung von GMT + 0530 (IST) Stunden in GMT (in diesem Fall werden im Wesentlichen 5,30 Stunden vom angegebenen Zeitstempel abgezogen Fall) Die Zeit entspricht 18,30 Stunden am 22. März 2016 (genau 5,30 Stunden hinter dem ersten Mal).
Außerdem können Sie jedes Datumsobjekt in einen Zeitstempel konvertieren, den Sie verwenden können
// Ausgabe würde ungefähr so aussehen wie "1458671400000"
Dies würde Ihnen den einzigartigen Zeitstempel der Zeit geben
quelle
Wie wäre es mit einer Entführung
Date
mit festem Datum ? Keine Abhängigkeiten, min + gzip = 280 B.quelle
Der beste Weg, dies zu tun, ist das folgende Format:
Dies wird in allen Browsern unterstützt und gibt Ihnen keine Probleme. Bitte beachten Sie, dass die Monate von 0 bis 11 geschrieben sind.
quelle
Das gleiche Problem, mit dem Safari konfrontiert war, wurde durch Einfügen in eine Webseite behoben
Hoffe, es wird auch in Ihrem Fall funktionieren
Vielen Dank
quelle
Wie bereits erwähnt, funktionierte die Verwendung von Date.parse () in Safari bei @nizantz nicht. Nach einigen Recherchen habe ich festgestellt, dass die lastDateModified-Eigenschaft für das File-Objekt veraltet ist und von Safari nicht mehr unterstützt wird. Die Verwendung der lastModified-Eigenschaft des File-Objekts hat meine Probleme behoben. Sicher nicht mögen, wenn schlechte Informationen online gefunden werden.
Vielen Dank an alle, die zu diesem Beitrag beigetragen haben, der mir dabei geholfen hat, den Weg zu gehen, den ich brauchte, um mehr über mein Problem zu erfahren. Wäre diese Information nicht gewesen, hätte ich wahrscheinlich nie mein Grundproblem herausgefunden. Vielleicht hilft das jemand anderem in meiner ähnlichen Situation.
quelle
Ich habe auch das gleiche Problem in Safari Browser
Hier die Lösung:
quelle
Dies ist nicht die beste Lösung, obwohl ich einfach den Fehler abfange und das aktuelle Datum zurücksende. Ich persönlich habe das Gefühl, Safari-Probleme nicht zu lösen. Wenn Benutzer einen nicht standardkonformen Browser verwenden möchten, müssen sie mit Macken leben.
Ich würde vorschlagen, dass Ihr Backend ISO-Daten sendet.
quelle
Verwenden Sie das Format 'MM / TT / JJJJ'. Zum Beispiel: - neues Datum ('02 / 28/2015 '). Es funktioniert gut in allen Browsern.
quelle