第5回
 第4回は脱線して本筋からは外れてしまいました。そしてその後の東日本大震災のため、少し中断してしまいました。
 それでは第3回の続きに進みます。
 下の枠内をコピーして実行してみましょう。

parsetest1.html
<html>
<head>
<title>暦計算 第5回、 parse test</title>
</head>
<body>
<script language="Javascript">
<!--
now = new Date();
document.write( Date.parse(now) ,'<br>');
//-->
</script>
</body>
</html>
 結果は次のようになります。
 この数字は何でしょうか?
  now = new Date();
 これは第3回で説明したように now という変数に現在の時刻を覚え込ませるものです。目新しいのはその次の行
  document.write( Date.parse(now) ,'<br>');
ですね。この Date.parse(now) は、
 1970年1月1日0時から now までの時間をミリ秒(1秒の1000分の1)で表わしたもの
を求める関数です。

 なお、第2回以来、"document.write(....)" というのを頻繁に使っていますが、これは '....' という内容を文書の中に表示するものです。そして、表示する内容の最後に '<br>' というのが出てきますが、これは「改行」の指示です。

 現在ではなくて特定の日を指定したい場合は
parsetest2.html
<html>
<head>
<title>暦計算 第5回、 parse test2</title>
</head>
<body>
<script language="Javascript">
<!--
document.write( Date.parse('1945/8/15) ,'<br>');
//-->
</script>
</body>
</html>
のようにします。結果は
 このように、1970年より昔の日付を指定すると、Date.parse() は負の値を返します。あたりまえですね。

 さて、第3回の例題は
 関ヶ原合戦(1600年10月21日)から太平洋戦争敗戦(1945年8月15日)までの日数を求める
というものでした。
 この間の時間は
  Date.parse('1945/8/15') - Date.parse('1600/10/20');
で求められます。ただしこれはミリ秒です。
ですから、これで割れば日数が得られます。次はそのコードです。
parsetest3.html
<html>
<head>
<title>暦計算 第5回、関ヶ原から太平洋戦争敗戦までの日数</title>
</head>
<body>
<script language="Javascript">
<!--
document.write( (Date.parse('1945/8/15')-Date.parse('1600/10/21'))/86400000 ,'<br>');
//-->
</script>
</body>
</html>
 結果は
 たしかに、『文科系のための暦読本』と一致します。

 ついでですので、同書で解説されているユリウス通日を求めてみましょう。『天文年鑑』2011年版(誠文堂新光社)によりますと、
 2011年1月1日世界時0時のユリウス通日(JD):2455562.5
となっています。ユリウス通日は世界時12時を0時とします。これは元々天体観測のために作られたものなので、深夜に日付が変わるのは不便なためです。このため世界時0時のユリウス日は .5 が付きます。
 一方、
  Date.parse('2011/1/1:9:0')/86400000
を求めてみますと、 となります。'2011/1/1:9:0'とするのは、日本のパソコンでは時刻が日本時間に設定されているため、世界時0時は9時になるということです。
 ともかくこれから、
  y/m/d:9:0 のユリウス日=(Date.parse('y/m/d:9:0')-Date.parse('2011/1/1:9:0')/86400000+2455562.5
 ただし、'9:0'はどちらも共通ですから省略して(つまり0時として)
  y/m/d のユリウス日=(Date.parse('y/m/d')-Date.parse('2011/1/1')/86400000+2455562.5
 これを求めるプログラムは次のとおりです。
getJD.html
<html>
<head>
<title>暦計算 第5回、ユリウス通日</title>
</head>
<body>
<script language="Javascript">
<!--
function JD(ymd) {
return( (Date.parse(ymd)-Date.parse('2011/1/1'))/86400000+2455562.5 );
}

ymd = '1600/10/21';
seki = new Date(ymd);
document.write( seki.getYear(),'年',
seki.getMonth()+1,'月',
seki.getDate(),'日のユリウス通日:',
JD(ymd),'<br>');
//-->
</script>
</body>
</html>

  function JD(ymd)
というのは、任意の年月日 ymd に対するユリウス通日を求める関数です。その関数の内容は { から } の間に書かれます。ここでは
  return( (Date.parse(ymd)-Date.parse('2011/1/1'))/86400000+2455562.5 );
がその内容で、先ほどの式を計算してその結果を返します。
 この関数を一度定義しておくと、任意の ymd を与えればユリウス通日を求められます。この例では ymd として 1600/10/21 を与えていますが、この結果は
 『文科系のための暦読本』では 2305741 となっていますが、小数以下を切り捨てたものです。
 このプログラムで
  ymd='1945/8/15';
と書き換えると、
となることを確認してみましょう。
 (Javascript では 1900年代の 19 は省略されてしまいます。これは昔のコンピュータが西暦の下2桁だけで処理していた−−その副作用があの2000年問題−−ことの名残なのです)。

はじめに戻る
第3回へ
第4回へ
第6回へ

May 2011

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