JavaScript 作 ▸ 2018-04-21 17:50 改 ▸ 2018-11-09 18:58 JavaScriptの負のタイムスタンプ? #JavaScript Dateは -271821年4月20日 まで対応 それを下回ると Invalid Date (Error は吐かない) 偶然、負の数のタイムスタンプ見てびびったんだけど、そもそも Date は1970年1月1日より過去にも普通に対応してた。 Date - JavaScript | MDNJavaScript の日時は、UTC の 1970 年 1 月 1 日 0 時を基準とするミリ秒単位の値です。1 日は 86,400,000 ミリ秒です。JavaScript の Date オブジェクトの範囲は、UTC の 1970 年 1 月 1 日に対して -100,000,000 日から 100,000,000 日です。試しにタイムスタンプとしてマイナス1秒ミリ秒を指定して Date 生成してみる。 const dt = new Date(-1); console.log( dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate(), dt.getUTCHours(), dt.getUTCMinutes(), dt.getUTCSeconds(), dt.getUTCMilliseconds() ); // -> 1969 11 31 23 59 59 999西暦0年1月1日を狙ってみる……。 const dt = new Date(-719528 * 24 * 60 * 60 * 1000); console.log( dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate(), dt.getUTCHours(), dt.getUTCMinutes(), dt.getUTCSeconds(), dt.getUTCMilliseconds() ); // -> 0 0 1 0 0 0 0-100,000,000日……は、-271821年4月20日。 const dt = new Date(-100000000 * 24 * 60 * 60 * 1000); console.log( dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate(), dt.getUTCHours(), dt.getUTCMinutes(), dt.getUTCSeconds(), dt.getUTCMilliseconds() ); // -> -271821 3 20 0 0 0 0-100,000,000日を下回ると Invalid Date になる。特にこの場で Error を吐いたりしない。 const dt = new Date(-100000000 * 24 * 60 * 60 * 1000 - 1); console.log(dt); // -> Invalid Date console.log( dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate(), dt.getUTCHours(), dt.getUTCMinutes(), dt.getUTCSeconds(), dt.getUTCMilliseconds() ); // -> NaN NaN NaN NaN NaN NaN NaN-271821年4月20日より過去をシステムで扱うときは気を付けること。