修正ユリウス日

Pocket

シリアル値

エクセルで経過日数を求めるには日付同士を単純に引き算すれば求められます。
エクセルではシリアル値という値を使って日付を管理しているからです。シリアル値は1900年1月1日を「1」、2日を「2」として延々と日数を数えた値です。

例えば、2001年2月18日から2004年1月1日までの経過日数を求めてみます。
2001年2月18日のシリアル値は「36940」で
2004年1月1日のシリアル値は「37987」ですので、引き算して
37987-36940=1047(日)となります。

なお1900年は閏年ではないのですが、Excelでは閏年として設計されていますので、1900年2月29日が存在する前提で計算されることに注意する必要があります。

JavaScriptにおける日付は1970年1月1日午前0時からの経過ミリ秒で管理されています。
したがって、Excelと同様、日付同士を引き算して、24*60*60*1000で割れば経過日数が求められます。

修正ユリウス日

困るのはExcelでは1900年より前の場合、JavaScriptでは1970年より前の場合です。それぞれのシステムの中では経過日数を計算することができません。
ここで使われるのがユリウス日というものです。これは紀元前4713年1月1日正午からの経過日数を表します。ただしこれを使うととても数値が大きくなるので現代では修正したものを使うのが一般的です。これを修正ユリウス日(MJDと略されます)と言います。1858年11月18日では修正ユリウス日は「1」になります。

この修正ユリウス日には公式があります。
VBA、JavaScriptで書いてみると次の通りです。

VBA

Function MJD(y, m, d)
  If m < 3 Then
    m = m + 12
    y = y - 1
  End If
  MJD = Int(365.25 * y) + Int(y / 400) - Int(y / 100) + Int(30.59 * (m - 2)) + d - 678912
End Function

JavaScript

function mjd(y,m,d){
  if(m<3){
    m+=12;
    y--;
  }
  return(Math.floor(365.25*y)+Math.floor(y/400)-Math.floor(y/100)+Math.floor(30.59*(m-2))+d-678912);
}

詳しい説明は省きますが、これを使うとExcelやJavaScriptの制限なしに経過日数を計算することができます。

Excelのヘルプ

Excel2007のヘルプにこんなのがあります。

ユリウス日は、現在の年と 1 月 1 日からの通算日数とを組み合わせて日付を表示するときに使用される場合があります。たとえば、2007 年 1 月 1 日は 2007001 と表され、2007 年 12 月 31 日は 2007365 と表されます。この形式はユリウス暦に基づいているわけではないことに注意してください。

Excelでは「2010年3月10日」は「2010069」をユリウス日と呼ぶそうです。何のために使うのでしょうか。わざわざ説明があるということは使う人がいるのでしょう。

また次のようなことも書かれています。

これとは別に、天文学上で一般的に使用されるユリウス暦の日付もあります。これは、紀元前 4713 年 1 月 1 日を起算点とした通日で表す日付システムです。

こちらの方が一般的だと思います。

まとめ

ユリウス日(ユリウス通日)と修正ユリウス日とExcelのシリアル値の関係をまとめておきます。

  • ユリウス日=修正ユリウス日+2400000.5
  • ユリウス日=シリアル値+2415018.5
  • 修正ユリウス日=シリアル値+15018

[ 2010年3月11日 | カテゴリー: Excel, JavaScript | タグ: , , ]

« | »

コメント

  1. […] 十二支は基準となる日の干支が分かれば計算で求まります。 修正ユリウス日というのがあります。1858年11月17日を0日目として経過日数を示すものです。 […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報