はじめに
JavaScriptには、時刻を取得する機能があります。 この時刻を取得する機能を利用して、時刻に合わせた特定の効果などを得ることも可能です。 ここでは、そういった時刻を利用するスクリプトを考えていこうと思います。 少々単純ですが、日付を表示するスクリプトと、時計を作るスクリプトをまず考え、次に応用的な利用法として、最近では完全に飽きられた感がありますが、時刻によって異なるメッセージを表示するスクリプトを検討していきます。
なお、JavaScriptは、基本的な特性として、クライアントサイドで稼動するプログラムであるということが挙げられます。 先にこの特性について軽く触れますが、Web上で稼動するプログラムは、それがどこで実行されるかによって若干特性が変わってきます。 HTMLを動的に生成したり、いくつかのファイルやデータなどを連結して一つのものにしたり、あるいは一般のパソコンでは負荷がかかりすぎるような処理などは、サーバコンピュータがそういったプログラム処理を行うことが理想的ですが、単純で非常に細かい動作などの処理については、それを行うためにいちいちサーバの処理を要請したりしていては、不必要に大きな負荷をサーバに負わせることになってしまいます。 パソコンでも稼動できる負荷の少ない動作で、プログラムの動作に必要なものがローカル環境で完結する(他にサーバ上のリソースを必要としない)場合は、パソコンの側にそういったプログラム処理を行わせるようにしたほうが有利です。 ですので、Web上のプログラムが実行される場所はそれぞれに使い分けられているのですが、このときサーバ上で実行され、閲覧者のパソコン側はその結果を受け取るだけ、という形になるWeb上のプログラムのことをサーバサイド・プログラムといい、閲覧者のパソコンの側にプログラムのコードが送り込まれ、パソコンの側で処理が行われるプログラムをクライアントサイド・プログラムといいます。 前者はCGIと言われるもので、開発言語としてはPerlやC、JAVA、ASPなどがあります。 後者のクライアントサイドのものとしては、JavaScriptやVBScriptが該当します。
さて、大きく脱線しましたが(核爆)、JavaScriptはここまで説明したように、クライアントサイド・スクリプトになります。 従って、JavaScriptが利用する環境変数などは、パソコンの設定に依存します。 つまり、ここで着手しようとしている時刻に関するスクリプトにおいて、JavaScriptが取得してくる時刻は、パソコンに設定されている時刻ということになります。 ユーザーのパソコンの時刻が狂っていると、正確な時刻を反映できないということは、前提として認識しておくと良いでしょう。
基本
まずは、JavaScriptで時刻を取得する事に関して、基本的な部分を整理しましょう。 JavaScriptで時刻を取得する場合は、始めにDateオブジェクトを定義します。 このときの記述は、「time= new Date();」というように記述します。 このとき、大文字小文字を間違えないようにしてくださいね。 例では、timeというIDでDateオブジェクトを定義しています。 Dateオブジェクトを定義した後は、そこから必要な値を取得すれば良いということになります。 Dateオブジェクトから値を取り出すメソッドについては、よく使いそうなものを以下に表としてまとめておきます。
メソッド | 取得する値 |
---|---|
.getYear() | 西暦の年数を取得します。 |
.getFullYear() | 西暦の年数を4桁で取得します。 JavaScript1.3以降対応。 |
.getMonth() | 月を取得します。 なお、取得する値は、本来の月の1つ前の値が返ってきますので、注意してください。 |
.getDate() | 日付を取得します。 |
.getDay() | 曜日を取得します。 日曜日が0、以下順に1ずつ大きくなり、土曜日は6が返されます。 |
.getHours() | 時刻の時間を取得します。 24時間単位での値が返ります(午前午後の区別なく、0-23の値になります)。 |
.getMinutes() | 時刻の分を取得します。 |
.getSeconds() | 時刻の秒を取得します。 |
.getMilliseconds() | 時刻の1000分の1秒を取得します。 |
時刻関連の値は、これらを使って取得することになります。 ちなみに、月を取得するメソッドは、上にも書きましたが、1から12の値ではなく、0から11の値が返されます。 日本では月を年初めから1から12で数えますが、英語圏などでは月を数値ではなく名前で認識しているために、JavaScript等のプログラムにおける連番の開始値の0が、1月(January)に対応しているということではないかと思われます。 ちょっとしたところですが、異文化を感じますね。