支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


はじめに

JavaScript(JS)は主にWebシステムのフロントエンド開発に利用されることの多いオブジェクト指向スクリプト言語で、ユーザーのブラウザ上で実行されます。1995年に登場した歴史の長い言語であるJSは、実行可能なブラウザやバージョンが限られていたことからユーザー環境に依存する言語という印象が強かったですが、近年はGoogle ChromeやFire Fox、Safariといった主流のブラウザでの実行が可能となっています。またNode.jsというJSの開発環境がリリースされてからはフロントエンドだけではなくサーバー側で実行可能なプログラムも出てきており、その用途は広がり続けている状況です。

なおJSは多くのWebシステムで利用されていることから、この記事のようにインターネット上の参考情報が多く、書籍やオンライン学習ツールも充実していることも特徴となっていて、初心者が勉強しやすいプログラミング言語と言われています。今回は日時のデータを取得する際に利用できるJSのオブジェクトの一つ「Date」について紹介していきます。なおJSで日時データを取得する場合は「moment.js」や「day.js」「date-fns」といった外部ライブラリが使われることも多いですが、初めから組み込まれている「Day」が活用される場面もあるので、覚えておいて損はないと言えるでしょう。これからJSを勉強しようとしている方、まだ始めたばかりという方はぜひご覧ください。

Dateオブジェクトで具体的に何ができるか?

Dateは簡単に言うと、日時データが取得できて、初めからJSに含まれているオブジェクトです。日付、時間を一括で取得することも、例えば月だけ、年だけというように各情報を単体で取得することも可能です。なおJava言語にある「SimpleDateFormat」クラスのようにデータのフォーマットは行えず、JSにはDate以外のオブジェクトであっても日時をフォーマットするものがない点には注意が必要です。もしフォーマットしたいということがあれば、オリジナルな関数を作成することとなります。Dateオブジェクトではプログラムを実行した際の現在時刻を取得できることはもちろん、様々なメソッドを利用してミリ秒での取得、日時の加算・減算、比較等が可能です。

内部の仕組みとしては、Dateオブジェクトのインスタンスを生成した際にUNIXエポック(1970年1月1日0時0分0秒 UTC)からの経過ミリ秒のデータを保持するようになっています。UNIXエポックは基準となるUNIX時間のことで、ほとんどのコンピュータがこの時間を基準として日時を表示しています。なおDateオブジェクトでは、メソッドを使い分けることでJSを実行しているローカル環境の日時、世界協定時間(UTC)のどちらも取得が可能ですが、特別な事情がない限り多くのシステムではUTCを取得することの方が多いでしょう。

Dateオブジェクトの利用方法

Dateオブジェクトを利用するには初めにインスタンスを生成する必要があります。これは多くのオブジェクト指向型言語で行うことなので、JavaやPHP等のプログラミング言語を利用したことのある人は馴染みのある記述となります。インスタンス生成時の記述は例えば「var today = new Date( );」のようになります。「today」は変数なので別の文字列でも問題ないですが、インスタンスを生成すると同時に現在時刻が取得できるため、分かりやすい文字列としました。なおこれを「console.log( today )」で出力すると「Tue Jun 18 2021 19:15:10 GMT+0900 (JST)」というように表示されます。実はDateオブジェクトに関して、new演算子を付けないで関数として「Date();」を実行することも可能ですが、この場合は「new Date().toString()」を実行したことと同様となり、引数を指定したとしても取得できるのは現在の日時のみであることを覚えておきましょう。

「Date( )」に引数を指定しないと前述のように現在時刻が取得できますが、引数に任意の日時を渡すこともでき、その場合は引数の入力内容に基づいた日時を取得できます。例えば引数に「1655547310」「'2022/06/18 19:15’」「2022, 05, 18, 19, 15 」と入力して出力するとどれもほぼ「Tue Jun 18 2021 19:15:00 GMT+0900 (JST)」に近い日時が表示されます。なお最後の「2022, 05, 18, 19, 15 」の月に「05」と入れているにもかかわらず6月と認識されるのは、Dateオブジェクトの月の数え始めが「0=1月」からとなるためです。「1655547310」はミリ秒であり、「'2022/06/18 19:15’」は文字列であるためこの場合は月の数え始めを気にする必要がありません。また「2022, 05, 18, 19, 15 」は分まで指定していますが、秒、ミリ秒まで入れることや、逆に年と月だけに省略して入力することも可能で、省略した項目については全て「0」が渡されます。さらに年の部分を二桁で「22」と入力した場合は「1900+22」となるため「1922年」となってしまうことには注意が必要です。ここまで紹介した方法ではローカル環境に設定されているタイムゾーンが適用されてしまうので、そのままシステムで利用することは少ないですが、このようにDateオブジェクトは、様々な形式の引数から日時取得が可能ということがわかっていただけたことでしょう。

単体でデータを取得する

続いて年や月等の情報を一つずつ取得できるメソッドを紹介します。年だけを取得する際は「getFullYear( )」、月は「getMonth( )」、日付は「getDate( )」、曜日は「getDay( )」、時刻は「getHours( )」、分は「getMinutes( )」、秒は「getSeconds( )」、ミリ秒は「getMilliseconds( )」とDateオブジェクトにはそれぞれのメソッドが存在します。年に関して「getYear( )」というメソッドもありますが、現在は「getFullYear( )」が推奨されているため記述を誤らないよう気をつけましょう。また前述したように「getMonth( )」では「0=1月」となり 、「getDay( )」は「0=日曜日」となりますが、日付の「getDate( )」は「1=1日」となるので仕様を混同しないようご注意ください。なお「getHours( )」で取得できる範囲は「0〜23」で「getMinutes( )」とgetSeconds( )」はどちらも取得できる範囲が「0〜59」となります。使い方は簡単で、インスタンス生成後に「var year = today.getFullYear()」「var month = today.getMonth()」「var date = today.getDate()」等を実行するだけです。これらは全てローカル環境のタイムゾーンが使わレます。

続いて世界協定時刻(UTC)で取得したい場合ですが、こちらも簡単で、前述したメソッド名の「get」の直後に「UTC」を付けるだけで、使い方は同じです。「getUTCFullYear( )」、月は「getUTCMonth( )」、日付は「getUTCDate( )」、曜日は「getUTCDay( )」、時刻は「getUTCHours( )」、分は「getUTCMinutes( )」、秒は「getUTCSeconds( )」、ミリ秒は「getUTCMilliseconds( )」となります。メソッド名を変えるだけなので記述例は省略します。

Dateオブジェクト内の便利なメソッドについて

最後にその他よく使われて便利なメソッドを紹介します。一つ目は「now( )」で、これを実行することで日時ではなくUNIXエポックからのミリ秒をそのまま取得できます。なお数年に一度、調整のために8時59分60秒が挿入される「うるう秒」は無視されます。

二つ目は「getTime( )」と「parse( )」でこれらはいずれも「’2022/06/18’」のように文字列で表された日付を引数とした場合、ミリ秒で返します。ミリ秒は日常生活で使うことは稀ですが、プログラムで演算処理等を行う際は便利なのでこれらのメソッドは使う機会があります。実際JSでは古い日時を小、新しい日時を大として、「’2022/06/18’」という形式で比較が可能ですが、getTime( )でミリ秒を取得して比較することもあります。getTime( )でミリ秒を取得した場合は、比較演算子の「<、>」の他、「===(厳密等価)」も利用できます。UTCの日時からミリ秒を取得したい場合は「UTC( )」というメソッドを利用します。

また、すでに日時データを一つずつ取得する方法としてget系のメソッドは紹介しましたが、Dateオブジェクトにも他のオブジェクト同様にset系メソッドが存在します。例えば経過したミリ秒を設定する「setTime( )」や、西暦を設定する「setFullYear( )」、UTCでの西暦を設定する「setUTCFullYear( )」等で、これらはget系と同様に利用頻度が高くなるでしょう。

三つ目は「toString( )」で、これは取得した日時データを英語の文字列データに変換できるメソッドとなります。例えば「var today = new Date();」で現在の日時を取得後、「console.log( today.toString( ) );」を実行すると文字列データとして「Sut Jun 18 2022 19:15:10 GMT+0900 (JST)」のように表示できます。

まとめ

今回見てきたようにDateオブジェクトの利用方法は特に難しい点はないと思いますが、似ているようで実は取得できる情報が異なるというメソッドが多く存在します。また取得できる数値の範囲がそれぞれ微妙に異なります。プログラマーによっては常にJSでプログラミングを行っているわけではなく、プロジェクトの同時進行等で他の言語も利用しているといったことも珍しくありません。そのような状況になるとメソッドの仕様を他の言語と混同したり、忘れてしまうこともあるでしょう。もしDateオブジェクトの使い方を忘れてしまった場合は、ぜひこの記事に立ち返っていただけると幸いです。なおDateオブジェクトの使い方を覚えたら、JSの便利な外部ライブラリを使っての日時取得も試してみてはいかがでしょうか。