ユリウス日
ユリウス日からの逆算
年月日 | ユリウス日 | 備考 |
---|---|---|
1582年10月 4日 | 2299160 | ユリウス暦の最終日 |
1582年10月15日 | 2299161 | グレゴリオ暦の開始 |
ユリウス日 | 年月日 | 備考 |
0 | -4712年1月1日 | ユリウス日の開始 |
ユリウス日(Julian Day、JD)とは、ユリウス暦紀元前4713年1月1日の正午(世界時)からの日数です。従って、翌日の0時は0.5
となり、12時を過ぎないと1
にはなりません。日数計算は、この点を考慮に入れなければならないのがちょっと「やっかい」。
計算式は、Wikipediaのユリウス通日
をそのまま使用しています。この計算式にはガウスの記号が含まれていますが、Javascriptでは床関数のMath.floor()
を使うと所定の結果が得られます。
また、Javascriptにはmod
関数がないので自力で余りを計算します。この際に、負の整数の余りを計算する場合があるので注意が必要です。例えば、
m = (month - 3) mod 12の計算において、1月の場合の値は
m = 10
であることを期待しています。mod
使わずにこの式を書き換えると
wm = month - 3 // 面倒なのでこれを使います m = wm - [wm / 12] * 12とできます。[wm / 12]は、ガウスの記号で結果を整数化するものとします。通常は、
int
関数を使用ことが多いのですが、Javascriptにはこの関数もありません。
ここでは、分子 wm が負の場合は -1
、正の場合は 0
になることを期待しています。
使用する言語により、意図通りの物もあれば、全て 0
になるものもありますので注意が必要です。
Javascriptの場合は、前にも触れた通り Math.floor
関数が期待通りの値を返してくれますのでこれを使用すればよいでしょう。
剰余の計算については、Modの確認処理も参考にしてください。
紀元前の指定方法は、国立天文台のユリウス日に則っています。即ち、
「紀元元年の前年を0年としています。このため、これを紀元前1年とする方法とは1年ずつ差異があります。」と言うことですが分かりましたか?
つまり、西暦0年なんて存在しないが、便宜上B.C.1年を西暦0年として計算しています。なので、紀元前を計算する場合は、「年に 1
を加えてね」ということです。
ユリウス日の起点となる紀元前4713年1月1日を、前記国立天文台のページに入力すると「該当なし」になります。年には 1 を加えた -4712(B.C.年 + 1)
を指定する必要があります。