表題の言う通りである。妙に最近(2000年代前半)いじる事が多くなった。さて、コンピュータの暦法と言っても、暦法などは存在しない。
※・・一応、1970/01/01 から数えてるものがある。NN 用の様だ。JScript なのに。
ヤツらはひたすら秒数を数えているだけである。しかも 1000 分の 1 秒だ。とは言え、ちゃんと getDate(); というメソッドがあるから大丈夫。普通はこっちを使うね。
問題になるのは getMonth();(月)取得だ。これだけがナゼか 0 から始まる。1月が 0 番だ。よって表示の際は +1 しなければならない。理由はよく分からないし、便利に思った事もない。※数列としては扱い易い・しかし表示の時点でどうせ尻拭いが必要※
getDay(); とすると、曜日が出てくる。あ、これも 0 番からだった。いずれもローカルマシンの時間を取得している。時間を合わせておかないと意味が無い。
※・・・NN 系のブラウザでは、そのまま英語名の月名が出てくるので、配列に直に使っているのだろう。
私はわざわざ生誕日からの日数を算出するスクリプトを日にちの引き算などでやってしまったが、コンピュータ内のメソッドでいっぺんにやった方が簡単だし正確である。チッ。
方法を聞いてくれ。まず現在年から誕生年を引いて経過年を取得。これは簡単。月も引き算だが、これは必ず誕生月が小さいとは限らない。引き算をして 0 以下になったら年度を -1 して月数を +12 するのだ。必ず12ヶ月だから出来る方法。これで閏月でもあった日にゃ・・。
さて、前もって誕生月を仮1月としたズレカレンダーを作っておく必要がある。一応、自分で閃いた技なんだが・・・随分バカな事をやっている気分になって来た。
それが、イノヴェーション。
次が大変、日付の引き算だ。今度は 28 〜 31 日である。しかも全っ然、規則的ではない。例によって 0 以下になったら、月数を -1 して、その前の(ズレ)月の日数を加算するのだ。
しかも閏年が立ちはだかっている。もう大変変態。4 で割り切れる年は閏年、でも 100 で割り切れると却下、さりとて 400 で割り切れれば返り咲き、といった具合である。始めの年から経過年数分だけ for 文で閏年の回数、つまり日数を算出。
そして、経過年 * 365 + ズレカレンダー正月から現在月日までの日数 + 経過年内の閏年数、という計算をする。
辻褄合わせ(パッチあて)はまだ終わらない。
更に表示年が「閏年」で(占い等での)対象日付が自身の誕生月以前だった場合、1日プラス。その後、閏年生まれの人は、閏年なら今度は1日マイナス。
終わり。天動説を証明しようとしてる天文学者の様な心持ち。
しかし全部行き当たりばったり。コンピをコンピとして使ってない。
でも、最初に言ったメソッドを使えばたった3行で出来るよ。
スゲェつまらんよ。(グチじゃん。)
※・・何でも旧ソ連で更に改良版、「900 で割った余りが 200 か 600 なら閏年」というのが 1923 年に採用されたとかしないとか。 45,000 年で1日のズレですが、西暦 2800 年から既存のモノとズレます。はよ宇宙暦とかにならんかな。
上記で開発された技術は、Jcont 枠の月齢(占い) / マヤ暦 / バイオリズムでの日数計算に(意地で)現用されてゐます。