短い答え:setTime
の代わりに使用しsetMilliseconds
ます。
長い答え:
問題は、開始日が正しくないことです。の値はエポック(1970 年 1 月 1 日 00:00:00 UTC)1383447600000
からの秒数ですが、開始日はエポック 0ではありません! 代わりに、それは年です:0
1899
> var t = new Date(Date.UTC(0, 0, 0, 0, 0, 0, 0));
> console.log(t.getFullYear());
1899
次にsetMilliseconds
range over を使用して999
指定すると、値が適切な年数、日数、時間数、秒数、ミリ秒数に変換され、現在の日付に加算されます。
1383447600000
43年強に相当します。つまり、基本的には、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
。