2013-09-21 7 views

Antwort

7

Die erste Version konvertiert eine Date in eine Zeichenfolge und analysiert es, was eine ziemlich sinnlose Sache zu tun ist - und in einigen Fällen Informationen verlieren könnte, vermute ich. (Stellen Sie sich vor, während einer DST-Transition, wenn die Uhr zurückgeht - die gleichen lokalen Zeiten treten zweimal für diese Stunde auf, und ich weiß nicht, ob die String-Darstellung zwischen den beiden Vorkommen unterscheiden würde.)

Die zweite ist signifikant sauberer meiner Meinung nach. Im Allgemeinen sollten Sie String-Konvertierungen vermeiden, wenn Sie sie nicht brauchen - sie können oft zu Problemen führen, und es gibt nichts in dem, was Sie zu tun versuchen, das ist inhärent über eine String-Darstellung.

Es sei denn, Sie tatsächlich brauchen die Date anderswo, wäre es einfacher, zu verwenden:

ms = new Date().getTime() 

Oder besser noch, verwenden Sie die statische now() Methode:

ms = Date.now() 
+0

Was für eine saubere Antwort !!! +1 :) –

+0

whoa, ich brauche eigentlich nicht die _string_, weil ich das Ergebnis, danke für die Antwort und ** + Antwort ** über die einfachere Verwendung berechnen :) – faid

2

Date.parse(dt)

Die Parse-Funktion wendet die ToString Operator ihr Argument und interpretiert die resultierende Zeichenfolge als ein Datum; Es gibt eine Zahl zurück, der UTC-Zeitwert entspricht dem Datum. Die Zeichenfolge kann abhängig vom Inhalt der Zeichenfolge als lokale Zeit, UTC-Zeit oder Zeit in einer anderen Zeitzone interpretiert werden.

getTime()

Gibt den numerischen Wert für das angegebene Datum der Zeit entspricht, gemäß der Weltzeit.

1

Leistung der groß sein würde Unterschied. In beiden Fällen weisen Sie eine Date instance zu. Im ersten Beispiel übergeben Sie die Datumsinstanz an parse(), die eine String erwartet. Die JavaScript-Engine ruft toString() am Datum auf, das auch eine Zeichenfolge für das Datum zuweist. Im Grunde ist es das gleiche wie:

dt = new Date();    // allocate a Date 
dateString = dt.toString(); // allocate a String 
ms = Date.parse(dateString); // Total: 2 allocations 

Im zweiten Beispiel, Sie rufen die getTime() Methode auf der Date-Instanz, die die String Zuordnung beseitigt.

dt = new Date();    // allocate a Date 
ms = dt.getTime();   // Total: 1 allocation 

Eine weitere Option alle Zuordnungen zu beseitigen wäre Date.now() zu nennen:

ms = Date.now();    // Total: 0 allocations 

Dies geht direkt zurück in die Zeit in ms, ohne die anderen Objekte zu konstruieren.

1

Obwohl es eine alte Post ist, überlasse ich meine Antwort für jemanden, der später als ich hier besuchen.

dt = new Date(); 

// often false, occasionally true 
Date.parse(dt) === dt.getTime() 

Dies ist, weil Sie die Informationen über Millisekunden verlieren, wenn Sie dt.toString() tun, die intern von Date.parse(dt) genannt wird. Zumindest für Chrome (63.0.3239.84) und Firfox Quantum (57.0.3) implementieren sie die toString() Methode des Date-Objekts wie folgt. Sie können das folgende Beispiel selbst ausprobieren.

dt = new Date('2018.1.1 01:01:01.001') 
dt.getTime() // 1514739661001 
Date.parse(dt) // 1514739661000 

Date.parse(dt) gleich zu dt.getTime() nur, wenn dt zur Zeit erfasst wird, dass Millisekunden gleich 0