2013-05-20 15 views
5

なります。の変換は、私は2つの変数を持って同じ結果

私はjsファイルから奇妙な行動に直面している:

私は

alert(
    tempTimeRequests+"\n"+ 
    timeLastUpdateRequests+"\n"+ 
    Date(tempTimeRequests)+"\n"+ 
    Date(timeLastUpdateRequests) 
) 

ために得る結果を明確に持っている場合、私は秒の同じ値を持って来る方法

1369063665000 
1369063651000 
Mon May 20 2013 17:27:51 GMT+0200 (CEST) 
Mon May 20 2013 17:27:51 GMT+0200 (CEST) 

されます2回目は51秒(正しい結果が得られる)ではなく、1回目は65秒(05秒になる)でしょうか? 私はそれに本当に驚いています。

+1

これは奇妙です。別々に(それぞれ 'console.log'を使って)印刷すると、正しい値が得られます。 'console.log'を一つの' console.log'呼び出しに結合すると、同じ値が表示されます( 'alert'と明らかに同じです) – Ian

+2

' new date( ')を使うと、私にとってはうまくいくようです – Ian

+2

MDNから:"通常の関数( 'new'演算子を持たない)は' Date'オブジェクトではなく文字列を返します; "これは完全にうまくいくようです。また、ES5から:http://es5.github.io/# x15.9.2 – Ian

答えて

4

を修正する必要があります。日付を関数としてではなく、コンストラクタと呼ばれている

関数として呼び出すspecification

15.9.2 Dateコンストラクタから

は、それが電流を表す文字列を返します。時間(UTC)

NOTE関数呼び出しDate(…)同じ引数を持つオブジェクト作成式new Date(…)と等価ではないです。

new Dateを使用している場合とは異なり、これは期待どおりです。

+1

大きな説明。ありがとう、私は答えを与えたときにこれを見つけようとしました。 – Robbert

+0

@Robbertそれは私ではなく、言語仕様です:) ECMAScript言語仕様をより読みやすく、アクセスしやすくするために、多くの積極的な努力がなされています。 http://es5.github.comは、簡単なナビゲーションとMDNのようなリソースへのリンクを提供します。 –

+0

@Benjamin Gruenbaumありがとう! – DanielX2010

3

これは、関数が現在の日付を返すようDateコンストラクタを呼び出すと、問題

alert(
    tempTimeRequests+"\n"+ 
    timeLastUpdateRequests+"\n"+ 
    new Date(tempTimeRequests)+"\n"+ 
    new Date(timeLastUpdateRequests) 
) 
+1

でも、Date()だけを呼び出すと、この種の動作が公開される理由は説明されていません。バグですか? –

+0

Dateがオブジェクトを作成するには、新しいキーワードを使用します。それを呼び出す方法は関数として使用していました。ブラウザによってはサポートされているものもあれば、そうでないものもあります。 – Robbert

+0

Javascriptを実行すると'Date(time)'関数を最初に評価します。 2回目に '' alert'に文字列を構築すると、 'Date'オブジェクトがその時に2回目に設定される文字列として取得されます。 – Shaded

関連する問題