短い答え:setTimeの代わりに使用しsetMillisecondsます。
長い答え:
問題は、開始日が正しくないことです。の値はエポック(1970 年 1 月 1 日 00:00:00 UTC)1383447600000からの秒数ですが、開始日はエポック 0ではありません! 代わりに、それは年です:01899
> var t = new Date(Date.UTC(0, 0, 0, 0, 0, 0, 0));
> console.log(t.getFullYear());
1899
次にsetMillisecondsrange over を使用して999指定すると、値が適切な年数、日数、時間数、秒数、ミリ秒数に変換され、現在の日付に加算されます。
138344760000043年強に相当します。つまり、基本的には、1899 年に 43 年強を追加するように JavaScript に指示しているので、1943 年になります。
のドキュメントからsetMilliseconds:
想定範囲外の数値を指定すると、それに応じて Date オブジェクトの日付情報が更新されます。たとえば、1005 を指定すると、秒数は 1 ずつ増加し、ミリ秒には 5 が使用されます。
Date.UTC代わりにepoch に一致するように正しい開始点を指定し0た場合は、正しい答えが得られます。
> var t = new Date(Date.UTC(1970, 0, 0, 0, 0, 0, 0)); //First param is year
> t.setMilliseconds(1383447600000);
> console.log(t.getFullYear());
2013
ただし、そのすべてを行う代わりに、次のように単純に使用できますsetTime。
> var t = new Date();
> t.setTime(1383447600000);
> console.log(t.getFullYear());
2013
要約すると、以下は機能的に同等です。
> var t = new Date(Date.UTC(1970, 0, 0, 0, 0, 0, 0)); //First param is year
> t.setMilliseconds(1383447600000);
> console.log(t.getFullYear());
2013
と
> var t = new Date();
> t.setTime(1383447600000);
> console.log(t.getFullYear());
2013
しかし、 epoch からのミリ秒を扱っている場合は0、 を使用するか、または を使用するsetTime場合は実際に epoch 0(を使用Date.UTC)で開始する必要がありますsetMilliseconds。