YMDToJD

グレゴリオ暦をユリウス日をに変換します。西暦1582年10月15日以降の日時を指定してください。

構文
YMDToJD( year, month, day, [hour, minute, second] )
引数
year
month
day
hour
minute
second
戻値
ユリウス日

プログラム

//////////////////////////////////////////////////
// 【引数】
//   year : 年 
//   month : 月 
//   day : 日 
//   hour : 時 
//   minute : 分 
//   second : 秒 
// 【戻値】
//   ユリウス日 
//////////////////////////////////////////////////
FUNCTION YMDToJD(year, month, day, hour = 0, minute = 0, second = 0)
	IFB month < 3 THEN
		year = year - 1
		month = month + 12
	ENDIF
	DIM JD = INT(year * 365.25)
	JD = JD + INT(year / 400)
	JD = JD - INT(year / 100)
	JD = JD + INT((month - 2) * 30.59)
	JD = JD + 1721088
	JD = JD + day
	DIM t = second / 3600
	t = t + minute / 60
	t = t + hour
	t = t / 24
	JD = JD + t
	RESULT = JD
FEND

プログラム実行例

指定した日付の直前の朔の日時を求める

DIM JD = saku(YMDToJD(2020, 4, 5))
DIM d = JDToYMD(JD)
PRINT d[0] + "/" + d[1] + "/" + d[2]
  1. saku
  2. YMDToJD
  3. JDToYMD
結果
2020/3/24

今年の穀雨の日付を求める

穀雨は太陽黄経30度なので、翌年1月1日から直前の中気を太陽黄経が30度になるまで繰り返す。

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM chuki = chuki(YMDToJD(year, month, day))
	DIM d = JDToYMD(chuki[0])
	year = d[0]
	month = d[1]
	day = d[2]
UNTIL ROUND(chuki[1]) = 30

PRINT d[0] + "/" + d[1] + "/" + d[2]
  1. GETTIME
  2. chuki
  3. YMDToJD
  4. JDToYMD
  5. ROUND
結果
2020/4/19

今年の十五夜の日付を求める

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM JD = saku(YMDToJD(year, month, day))
	DIM d = JDToYMD(JD)
	year = d[0]
	month = d[1]
	day = d[2]
	DIM date = getKyureki(year, month, day)
UNTIL date[2] = 8

RESIZE(d, 2)
arrayMap("text(%val%, <#DBL>00<#DBL>)", d)
date = JOIN(d, "/")
PRINT dateAdd("d", 14, date)
  1. GETTIME
  2. saku
  3. YMDTojD
  4. JDToYMD
  5. getKyureki
  6. RESIZE
  7. arrayMap
  8. JOIN
  9. dateAdd
  10. text
結果
2020/10/01

今年の春彼岸の日付を求める

翌年1月1日の直前の太陽黄経0度の日付(春分の日)を求め、その日を中日とする前後3を合わせた7日間を求める。

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM chuki = chuki(YMDToJD(year, month, day))
	DIM d = JDToYMD(chuki[0])
	year = d[0]
	month = d[1]
	day = d[2]
UNTIL normalizeAngle(ROUND(chuki[1])) = 0

RESIZE(d, 2)
arrayMap("text(%val%, <#DBL>00<#DBL>)", d)
date = JOIN(d, "/")
PRINT "彼岸入り<#TAB>" + dateAdd("d", -3, date)
PRINT "春分の日<#TAB>" + date
PRINT "彼岸明け<#TAB>" + dateAdd("d", 3, date)
  1. GETTIME
  2. chuki
  3. YMDToJD
  4. JDToYMD
  5. normalizeAngle
  6. ROUND
  7. RESIZE
  8. arrayMap
  9. JOIN
  10. dateAdd
  11. text
結果
彼岸入り	2020/03/17
春分の日	2020/03/20
彼岸明け	2020/03/23

今年の秋彼岸の日付を求める

翌年1月1日の直前の太陽黄経180度の日付(秋分の日)を求め、その日を中日とする前後3日を合わせた7日間を求める。

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM chuki = chuki(YMDToJD(year, month, day))
	DIM d = JDToYMD(chuki[0])
	year = d[0]
	month = d[1]
	day = d[2]
UNTIL normalizeAngle(ROUND(chuki[1])) = 180

RESIZE(d, 2)
arrayMap("text(%val%, <#DBL>00<#DBL>)", d)
date = JOIN(d, "/")
PRINT "彼岸入り<#TAB>" + dateAdd("d", -3, date)
PRINT "秋分の日<#TAB>" + date
PRINT "彼岸明け<#TAB>" + dateAdd("d", 3, date)
  1. GETTIME
  2. chuki
  3. YMDToJD
  4. JDToYMD
  5. normalizeAngle
  6. ROUND
  7. RESIZE
  8. arrayMap
  9. JOIN
  10. dateAdd
  11. text
結果
彼岸入り	2020/09/19
秋分の日	2020/09/22
彼岸明け	2020/09/25

次の満月の日付を求める

GETTIME()
DIM year = G_TIME_YY
DIM month = G_TIME_MM
DIM day = G_TIME_DD
DIM JD = YMDToJD(year, month, day)

REPEAT
	DIM TD = JD - 9/24
	DIM JC = (TD + 0.5 - 2451545) / 36525
	DIM λsun = longitudeSun(JC)
	DIM λmoon = longitudeMoon(JC)
	DIM Δλ = ABS(λsun - λmoon)
	JD = JD + ABS(180 - Δλ) / 15	// 180°に遠いときは大きい値、近いときは小さい値を足す
UNTIL ABS(Δλ - 180) <= 1 // 誤差が1以下になるまで

d = JDToYMD(JD)

RESIZE(d, 2)
PRINT JOIN(d, "/")
  1. GETTIME
  2. YMDToJD
  3. longitudeSun
  4. longitudeMoon
  5. ABS
  6. JDToYMD
  7. RESIZE
  8. JOIN
結果
2020/5/7

Was this post helpful?

関連記事

JDToYMD
JDToYMD関数は、ユリウス日をグレゴリオ暦に変換する関数です。グレゴリオ暦をユリウス日に変換するには、YMDToJD関数を使います。
saku
saku関数は、指定したユリウス日の直前の朔を求めます。グレゴリオ暦をユリウス日にするにはYMDToJD関数を使います。
getKyureki
getKyureki関数は、引数に指定したグレゴリオ暦の年月日から旧暦(天保暦)の日付を求める関数です。
dateDiff
dateDiff関数は、指定された2つの日付の時間間隔を返します。
today
today関数は、現在の日付を返す関数です。YYYY/MM/DD形式で返されます。時刻も含めて取得する場合はnow関数を使います。
getNthWeekday
指定年月の第何何曜日(第nW曜日)の日付を返します。
dateAdd
日時(date)に、指定した単位(interval)の時間(num)を加算して返します。正の値で未来、負の値で過去になります。
GETTIME
GETTIMEは日時を取得する関数です。第二引数に指定された基準日から第一引数に指定した日数を加算した値を返します。戻値は2000年1月1日からの秒数です。関数実行後特殊変数に値がセットされ、その特殊変数から日付情報を取得できます。
dateString
指定された日付を西暦から和暦に変換します。
getWeekdayName
getWeekdayName関数は、指定した曜日番号に対応する曜日名を返します。第一引数に曜日番号、第二引数にフォーマットを指定します。
nishiNibun
nishiNibun関数は、引数に指定したユリウス日の直前の二至二分の日時を求める関数です。
chuki
chuki関数は、引数に指定したユリウス日の直前の中気を求める関数です。
getRokuyo
getRokuyo関数は、引数に指定した日付から六曜を求める関数です。第一引数に年、第二引数に月、第三引数に日を指定します。
getYear
指定した日付から「年」を返します。
getMonth
指定した日付から「月」を返します。
getDay
指定した日付から「日」を返します。
dateValue
dateValue関数は、日付形式の文字列をシリアル値に変換する関数です。
getWeekday
引数に指定された日付から曜日番号を取得します。0:日曜〜6:土曜の範囲で値を返します。
isDate
isDate関数は、引数が有効な日付として認識できる場合はTrue、それ以外の場合はFalseを返します。
getEndOfMonth
getEndOfMonth関数は、date から m 月後の月末の日付を返す関数です。m は正の値で未来、負の値で過去になります。