2010-12-01 8 views
15

Dies ist mein Code:In Bezug auf JavaScript new Date() und Date.parse()

var exampleDate='23-12-2010 23:12:00'; 
    var date=new Date(exampleDate);//returns invalid Date 
    var date1=Date.parse(exampleDate);//returns NAN 

ich oben Zeichenfolge in Datum konvertieren möchten. Also habe ich einen Code geschrieben, wie Sie oben gesehen haben.

läuft Dieser Code fein in IE und Opera, aber date Variable mir ein ungültiges Datum zurückkehrt und date1 wird NAN in mozilla Firefox Rückkehr, was soll ich tun?

Antwort

6

Das obige Format wird nur in IE und Chrome unterstützt.

so versuchen Sie es mit anderen Formaten. Nachfolgend einige Formate und dort unterstützende Browser.

<script type="text/javascript"> 

//var dateString = "03/20/2008"; // mm/dd/yyyy [IE, FF] 

var dateString = "2008/03/20"; // yyyy/mm/dd [IE, FF] 
// var dateString = "03-20-2008"; // mm-dd-yyyy [IE, Chrome] 
// var dateString = "March 20, 2008"; // mmmm dd, yyyy [IE, FF] 
// var dateString = "Mar 20, 2008"; // mmm dd, yyyy [IE, FF] 

// Initalize the Date object by passing the date string variable 
var myDate = new Date(dateString); 
alert(myDate); 
</script> 
+0

yyyy/MM/dd funktioniert auch in Chrome ... Danke für die Lösung !!! – OverMars

+2

Dies sollte nicht die akzeptierte Antwort sein, siehe Casablancas Antwort – Toskan

2

JavaScript sollte Umwandlung zumindest aus den folgenden dateStrings unterstützen:

* yyyy/MM/dd 
* MM/dd/yyyy 
* MMMM dd, yyyy 
* MMM dd, yyyy 

mit Versuchen:

var exampleDate='12/23/2010 23:12:00'; 
    var date = new Date(exampleDate); 
25

Die Zeichenfolge in Ihrem Beispiel ist von den Browsern nicht in einem der Standardformate erkannt. Die ECMAScript-Spezifikation erfordert Browser in der Lage sein, nur ein Standard-Format zu analysieren:

Das Format ist wie folgt: YYYY-MM-DDTHH:mm:ss.sssZ

Dieses Format enthält Datum nur Formulare:

YYYY

YYYY-MM

YYYY-MM-DD

Es enthält auch zeit nur Formulare mit einer optionalen Zeitzone angehängten Offset:

THH:mm

THH:mm:ss

THH:mm:ss.sss

Ebenfalls enthalten sind „date-Zeiten“, die eine beliebige Kombination sein kann obenstehendes.

Wenn der String diesem Format nicht entspricht, kann die Funktion auf beliebige implementierungsspezifische Heuristiken oder umsetzungsspezifische Datumsformate zurückgreifen. Nicht erkennbare Strings oder Daten , die ungültige Elementwerte im Format String enthalten, sollen dazu führen, dass Date.parse NaN zurückgibt.

Also in Ihrem Beispiel ist die Verwendung von 2010-12-23T23:12:00 die einzige Zeichenfolge, die garantiert funktioniert. In der Praxis erlauben die meisten Browser auch Datumsangaben im Format DD Month YYYY oder Month DD, YYYY, sodass Zeichenfolgen wie 23 Dec 2010 und Dec 23, 2010 ebenfalls funktionieren könnten.

+0

danken es mir helfen, mein Problem – Chitresh

+0

Zum Zeitpunkt der Antwort geschrieben wurde reslove, Parsen von Datumsstrings war abhängig Implementierung, also gab es keine ** ** Saiten das ist "garantiert zu arbeiten". Seitdem mussten ISO 8601-Langformat-Strings ohne Zeitzone von Browsern konsistent mit ES5 (wie Firefox) und lokal von Browsern konsistent mit ECMA 2015 (wie Chrome und Safari) als UTC analysiert werden. Alle 3 Verhaltensweisen können in aktuell verwendeten Browsern (2015) gesehen werden, wie z. B. IE8, der NaN zurückgibt, Firefox 40, der es als UTC behandelt, und Chrome 44 als lokal. Es gibt also immer noch ** keine ** Zeichenfolgen, die "garantiert funktionieren". – RobG

4

Sie es mit einem regulären Ausdruck manuell analysieren könnte dann mit den Datumselemente das Datum Konstruktor aufrufen, wie zum Beispiel:

var parseDate = function(s) { 
    var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/; 
    var m = re.exec(s); 
    return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null; 
}; 
var dateStr = '23-12-2010 23:12:00'; 
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800 
1

Verwenden datejs und diesen Code:

var exampleDate='23-12-2010 23:12:00'; 
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss'); 

myDate sollte ein korrekt konstruiertes Date Objekt sein.

0

in diesem Format Verwenden Sie einfach:

var exampleDate='2010-12-23 23:12:00'; 
Verwandte Themen