※このページは、JavaScript を使っています。(IE4, NN4 以上を推奨)
「ユリウス日」というのは、天文学、年代学で使用される「時間」の記述法で、1638年に発表された「通日法」です。なぜ天文計算で、これを使用するかというと、暦法、紀元前/後、年、月、日、各国標準時などを意識することなく、「日」という単一の単位(日以下の時刻は、小数で表す)のみで時間を定義できるというメリットがあるからです。
このユリウス日の起点となる時間、すなわちユリウス日=0 となる瞬間は、ユリウス暦BC4713年1月1日の正午(世界時)です。ちなみに、ユリウス暦というのは、ローマ時代の皇帝であるユリウス・カエサル(Julius Caesar)が定めた暦法で、現在使われているグレゴリオ暦とは少しだけ違います。詳しい話は、専門書を参照して下さい。
ちなみに、ユリウス日という名前は、ユリウス暦の「ユリウス」という名前とは直接の関係はありません。この「ユリウス日」を考え出したフランス人の Joseph Justus Scaliger が、父親の名前 Julius Caesar Scaliger からとったものだということです。(でも、父親の名前は、ローマ皇帝にちなんだものだと思うんだけどなぁ。)
JavaScriptプログラムの主要部分は、以下の関数です。
なお、計算アルゴリズムは、以下の書籍を参考にしました。
書名:こよみ便利帳
著者:暦計算研究会編
発行:恒星社厚生閣(昭和58年)
書名:天体位置略算式の解説
著者:暦計算研究会 井上圭典・鈴木邦裕
発行:海文堂出版(1991年)
関数の機能:
日時(グレゴリオ暦)からユリウス日を得る。
関数の引数:
year - 年 [単位:西暦年]
month - 月[単位:月]
day - 日[単位:日]
hour - 時 [単位:時]
minute - 分 [単位:分]
stype - 標準時タイプ(0=UT,1=JST)
関数の戻り値:
ユリウス日 [単位:日]
入力グローバル変数:
なし
出力グローバル変数:
なし function TransDateToJD(year,month,day,hour,minute,stype) { var t,jd; if(month<3) { year -=1; month+=12; } t =Math.floor(year/100); jd =Math.floor(year*365.25)-t+Math.floor(t/4); jd+=Math.floor(30.6001*(month+1))+day+hour/24+minute/1440+1720996.5; if(stype) jd-=9/24; return jd; }
関数の機能:
ユリウス日から日時(グレゴリオ暦)を得る
関数の引数:
jd - ユリウス日 [単位:日]
stype - 標準時タイプ(0=UT,1=JST)
関数の戻り値:
なし
入力グローバル変数:
なし
出力グローバル変数:
iYear - 変換結果の年 [単位:西暦年]
iMonth - 変換結果の月 [単位:月]
iDay - 変換結果の日 [単位:日]
iHour - 変換結果の時 [単位:時]
iMinute - 変換結果の分 [単位:分] function TransJDToDate(jd,stype) { var z,f,aa,a,b,c,k,e; if(stype) jd+=0.875; else jd+=0.5 z =Math.floor(jd); f =jd-z; aa=Math.floor((z-1867216.25)/36524.25); a =Math.floor(z+1+aa-Math.floor(aa/4)); b =a+1524; c =Math.floor((b-122.1)/365.25); k =Math.floor(365.25*c); e =Math.floor((b-k)/30.6001); iDay=Math.floor(b-k-Math.floor(30.6001*e)); if(e<13.5) iMonth=e-1; else iMonth=e-13; if(iMonth>2.5) iYear=c-4716; else iYear=c-4715; iHour =Math.floor(f*24); iMinute=Math.floor((f*24-iHour)*60+0.5); }