第3回
前回のプログラム(test1.html)について、ちょっと解説します。
9行目に
now = new Date();
というのがあります。これは now という変数に現在の時刻を覚え込ませるものです。”現在の時刻”というのは使っているコンピュータの内部クロックの時刻です。だからこれが狂っていたら当然正しい時刻にはなりません。
それでは時刻はどのように覚え込まれているのでしょうか?それは10行目、11行目のゴチャゴチャした内容を解読すればわかります。ここには以下の変数(実は関数)が出て来ています。
.getYear() | 年
|
.getMonth() | 月
|
.getDate() | 日
|
.getDay() | 曜日
|
.getHours() | 時
|
.getMinutes() | 分
|
.getSeconds() | 秒
|
ただし、.getMonth() は
1月:0
2月:1
・・・・
12月:11
と、1 ずつ少ない数値で記憶されています。だから正しい月名を知るためには
now.getMonth()+1
と、1を足してやらなければなりません。
英語では1月はJanuary、2月はFenruary、・・ですね。月は数字で表わしません。一方、コンピュータでは何事も0から数えます。だから、Januaryは”0月”とするのが都合が良かったのです。
また、.getDay() も次のようになっています。
日曜日:0
月曜日:1
・・・・
土曜日:6
test1.html の8行目
you = new Array('日','月','火','水','木','金','土');
これは、曜日を正しく表示させるために you という配列変数を用意したものです。配列変数というのはいくつか(この場合は7つ)のメンバーの集まりで、そのメンバーには
0番:日
1番:月
・・・・
6番:土
が割り当てられています。そしてたとえば0番のメンバーを指定する場合は、
you[0]
とします。この 0 のところ(”引数”と言います)に.getDay()を与える、つまり
you[now.getDay()]
とすると、正しい曜日が日、月、・・・、土で得られます。
余談ながら、中国では曜日は”星期日”、”星期1”、”星期2”、・・と言いますね。これは”星期日”以外は.getDay()で簡単に得られることになります。
ここで説明したものを日付オブジェクトと言いますが、これらを使えば暦の計算は簡単なのです。
しかし、
now = new Date();
では現在の時刻しかわかりません。それでは暦の計算はできないのではないか?
心配いりません。たとえば、
seki = new Date('1600/10/21');
これは seki という変数に1600年10月21日を覚え込ませます。時:分:秒まで指定することもできます。
seki = new Date('1600/10/21:8:23:45');
これで seki.getYear() には1600、seki.getMonth() には9(10月より1少ない)、・・などが記憶されます。ちなみに、この日が土曜日であったことも seki.getDay() を見ればわかります。
ところで、この日は日本では慶長十五年九月十五日で、関ヶ原合戦があった日なのです。
『文科系のための暦読本』(上田雄著、彩流社)には、この日から太平洋戦争集結の1945年8月15日までの日数を求めるという例題があります。次回はこれをやってみましょう。
Dec. 2010
ご意見、ご感想
ザ・ランスのホームページ
旧暦と二十四節気のページ