2017年8月30日(水)
日付関数は、分かっていても、ややこしい。 #HTML5&CSS3&JavaScript 時刻を表すのには、地方時(Local Time)と協定世界時(UTC)があります。
地方時の1つである日本標準時(JST)は、UTC+9と記述され、イギリス・グリニッジ天文台がある時間帯から+9時間ズレています。
コンピュータでは、時刻はUNIX時間で取り扱われます。協定世界時 (UTC) での1970年1月1日0時0分0秒の時刻からの形式的な経過秒数(閏秒を加味しない)で表されます。
UTC 1970年1月1日0時0分0秒
=0 UNIX秒
=JST 1970年1月1日9時0分0秒
JST 1970年1月1日0時0分0秒
=-32400 UNIX秒
さて、ここからJavaScriptの話に移ります。まずは、new Date()で新しい日付オブジェクトを作成しましょう。()内の引数を省略すると、現在の時刻として扱われます。
-- プログラミング --
<script>
$date = new Date();
alert($date);
</script>
--
↓
-- アラート例 --
Wed Aug 30 2017 12:34:56 GMT+0900 (東京 (標準時))
--
JavaScriptを実行しているコンピュータに設定されている地方時で取り扱われています。
new Date(年,月-1,日,時,分,秒,ミリ秒)と、日本標準時で記述してみましょう。
-- プログラミング --
<script>
$date = new Date(1970,0,1,0,0,0,0);
alert($date.getTime());
alert($date.getTimezoneOffset());
</script>
--
↓
-- アラート --
-32400000
-540
--
日本標準時で1970年1月1日0時は、-32400 UNIX秒。ちゃんとタイムゾーンが、-540分/60分=-9時間(符号に注意)が設定されています。
ここまでをまとめると、new Date()は日本標準時で設定し、getTime()の数値はUTC UNIXミリ秒ということです。
ところが、new Date(UTC UNIXミリ秒)という記述方法があります。自分は、これだけ特別として覚えています。
P.S. そもそも、UNIX時間と言ったら、協定世界時UTCなのです。