第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日までの日数を求めるという例題があります。次回はこれをやってみましょう。

はじめに戻る
第2回へ
第4回へ
第5回へ

Dec. 2010

ご意見、ご感想
ザ・ランスのホームページ
旧暦と二十四節気のページ