2013-09-21 9 views
5

との主な違いは何です:Date.parse()と.getTime(の違い)

dt = new Date(); 
ms = Date.parse(dt); 

dt = new Date(); 
ms = dt.getTime(); 

彼らは同じ出力を持っていますが、どのような違いは?どちらを使うべきですか?

答えて

7

最初のバージョンではDateが文字列に変換されて解析されますが、これは非常に意味のないことです。情報が失われる可能性もあります。 (DSTの遷移中にクロックが戻ったときに、同じローカルタイムがその時間に2回発生していることを想像してください。

2番目はかなりです私の考えではクリーナー。一般的には、文字列変換が必要ないときは避けるべきです。問題につながることが多く、何をしようとしているのかは、本来は文字列表現のです。

ms = new Date().getTime() 

またはより良いを、静的now()メソッドを使用します:

ms = Date.now() 
+0

何クリーンな答えに等しい瞬間にキャプチャされている場合にのみdt.getTime()に等しいです! +1 :) –

+0

私は結果を計算するので、実際には_string_は必要ありません。答えはありがとうございます。 – faid

2

Date.parse(dt)

解析関数は、その引数へのToString演算子を適用し、日付として得られた文字列を解釈します。日付に対応するUTC時刻の値を返します。文字列は、文字列の内容に応じて、ローカル時間、UTC時間、または他のいくつかの時間帯の時間として解釈されます。

getTime()

世界時に基づき、指定された日時の時間に対応する数値を返します。

1

パフォーマンスは大きなだろうが

あなたが実際にDate他の場所で必要な場合を除き、それを使用する方が簡単だろう差。どちらの場合も、Date instanceを割り当てます。最初の例では、Stringが必要なparse()に日付インスタンスを渡します。 JavaScriptエンジンは、DateのtoString()を呼び出し、日付の文字列も割り当てます。基本的に、それは同じである。第二の例で

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

、あなたは文字列の割り当てを排除しますDateインスタンス上getTime()メソッドを呼び出しています。すべての割り当てを排除する

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

別のオプションはDate.now()を呼び出すために、次のようになります。

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

これは、直接他のオブジェクトを構築することなく、ミリ秒の時間を返します。

1

古い投稿ですが、私より後でここを訪れる人には私の答えを残します。

dt = new Date(); 

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

あなたが内部的にDate.parse(dt)によって呼び出されdt.toString()を行うときは、ミリに関する情報を失うことになるからです。少なくともChrome(63.0.3239.84)とFirfox Quantum(57.0.3)では、このようにDateオブジェクトのtoString()メソッドを実装しています。次の例を自分で試すことができます。

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

Date.parse(dt)dtはミリ秒は0

関連する問題