まるノート

備忘録も兼ねて、様々なお役立ち情報をまとめています。

多分すごく分かり易い!UNIXTIMEをJavaScriptで扱う方法

はじめに

結構前に以下の記事を書きました。今回はJavaScript編です。

多分すごく分かり易い!UNIXTIMEをエクセルで扱う方法 - まるノート


UNIXTIME とは何か、といったことは上の記事を読んでもらえば幸いです。
エクセルよりもJavaScriptをはじめとするプログラムで計算した方がずっと楽です。

ただ、UNIXTIMEは日本時間と9時間の差がある、という点を押さえておかないと混乱してしまう可能性があるので、一度エクセルによる計算方法を覚えて、比較してみるとより理解が深まると思います。


Dateオブジェクト

まずはJavaScriptのDateオブジェクトについてサラッと触れます。

Date オブジェクト JavaScript で標準的に使える(ビルトインオブジェクト)で、new 演算子で日付を生成出来ます。
引数には、カンマ区切りで、年,月,日付の順で数値を入れるのが基本的な使い方です。

ただし、月は0から数えます。つまり1~12ではなく、0~11までの値をいれます。


試しに、以下のコードを実行してみます。

var hoge = new Date(2024, 4, 20);
console.log(hoge);


実行結果

node.js で実行した場合

2024-05-19T15:00:00.000Z

Chrome などの開発者ツールのコンソールから実行した場合

Mon May 20 2024 00:00:00 GMT+0900 (日本標準時)

ご覧の通り、実行環境によって結果の表示が異なります。
node.js で実行した場合、9時間後ろにずれていますね。


toLocaleString() 関数について

上述したように、Dateオブジェクトをインスタンス化した結果は実行環境によって表示が異なったり、
見た目もわかりにくいので、toLocaleString() 関数を利用することが多いです。

var hoge = new Date(2024, 4, 20);
var fuga = hoge.toLocaleString();

console.log(fuga);

実行結果は実行環境に関わらず以下になります。

2024/5/20 0:00:00


このように、Dateオブジェクトをnew演算子でインスタンス化した結果は、様々な関数と組み合わせて利用することがほとんどです。この記事では割愛しますが、月のみ、日にちのみを取得したりできます。


UNIXTIMEを取得する

ここで、本題であるUNIXTIMEにふれてゆきます。


getTime() 関数

getTime() という関数を利用することで、協定世界時(UTC)の1970年1月1日午前0時0分0秒からの経過時間をミリ秒単位で取得することができます。


UNIXTIME は同じく協定世界時(UTC)の1970年1月1日午前0時0分0秒からの時間を、秒数を表す数値でしたね。

以下のコードを実行してみます。

var hoge = new Date(2024, 4, 20);
var fuga = hoge.getTime();

console.log(fuga);

実行結果は実行環境に関わらず以下になります。

1716130800000


エクセルでUNIXTIMEを取得する

ここで、同じ日付を、エクセルを用いて UNIXTIME を算出した結果と比較してみます。 A1 セルに日付が入っているとすると、以下の数式で算出できます。
※計算方法の詳しい説明は冒頭のリンク先の記事をご参照下さい。

「= (A1 - 25569)*86400 - 32400」


ミリ秒と秒の違いはありますが、同じ時間を得ることがきました。
つまり、getTime() 関数によって、自動的に実行したPCの国・地域判断して、UNIXTIMEを取得することができるということです。


以上の内容から、getTime()関数でDateオブジェクトの日付から UNIXTIME を取得できる、というよりも、Dateオブジェクトで生成した日付の実体はUNIXTIMEである、と考えられるのではないでしょうか。

Dateオブジェクトで生成した日付は実行環境(node.js か Chrome開発者ツール)によって、表示が異なったりしますが、実体は同じUNIXTIMEで、それをベースに算出をしているということです。


ただし、UNIXTIMEといいつつ、ミリ秒計算なので秒で算出したい場合は、1000で割ってください(^^;)


おわりに

実体が秒ではなくミリ秒なので、ミリ秒単位の計算もしやすいという利点があります。

Dateオブジェクトは、引数を与えれば、年、月、日にち、時間、分、秒、ミリ秒まで指定が可能です。

var hoge = new Date(2024, 4, 20, 12, 30, 30, 111);
var fuga = hoge.getTime();

console.log(hoge);
console.log(fuga);

実行結果(Chrome開発者ツール)

Mon May 20 2024 12:30:30 GMT+0900 (日本標準時)
1716175830111


以上のように簡単に、時間~ミリ秒までUNIXTIMEに換算することができます。
エクセルでは時間と組み合わせた計算は結構手間がかかり、ミリ秒単位での計算はおそらくできないのではないかと思います(要検証)


以上、JavaScriptでUNIXTIMEを扱う方法でした。また、本記事ではあまりふれませんでしたが、Dateオブジェクトに関しては、便利な関数がたくさんあるので、自分でも是非色々しらべて理解を深めてゆきたいと思います。

最後までご覧頂きありがとうございます。