23 กุมภาพันธ์ 2559

การคำนวณหาจำนวนวันจูเลียน(Julian Day)

การคำนวณหาจำนวนวันจูเลียน(Julian Day)
จำนวนวันจูเลียน(Julian Day) คือจำนวนวันสะสมที่เกิดจากการนับจำนวนวันต่อเนื่องมาจากอดีต เป็นระบบการวัดเวลาสำหรับการใช้งานทางวิทยาศาสตร์โดยกลุ่มนักดาราศาสตร์ เป็นจำนวนวันในระบบวันที่จูเลียน(Julian Date) ซึ่งเริ่มนับมาจากวันที่ 1 มกราคม 4713 ปีก่อนคริสตกาล ในเวลาเที่ยงวัน และเริ่มต้นวันใหม่ทุกๆเที่ยงวัน ไม่ว่าผู้สังเกตจะอยู่บนพื้นที่ใดในโลกก็ตาม จะมีค่าวันจูเลียนเท่ากันทั้งหมด

สูตรการคำนวณหาจำนวนวันจูเลียน

Y = ปีคริสตศักราช
M = เดือน
D = วันที่(สามารถรวมจุดทศนิยมของเวลา คือ ชั่วโมง นาที วินาที)
JD = จำนวนวันจูเลียน

ถ้า M = 1 หรือ M = 2 ให้
Y = Y - 1
M = M + 12

ขั้นตอนการคำนวณ
A = INT(Y / 100)
B = 2 - A + INT(A / 4)

JD = INT(365.25 × Y) + INT(30.6001 × (M + 1)) + D + 1720994.5 + B

ตัวอย่างการคำนวณ วันที่ 20 กรกฎาคม 1976 เวลา 12.00 น.
Y = 1976
M = 7
D = 20.5
เวลา 12.00 น. = 12 / 24 = 0.5 , D = 20 + 0.5 = 20.5

A = INT(1976 / 100) = 19
B = 2 – 19 + INT(19 / 4) = –13

JD = INT(365.25 × 1976) + INT(30.6001 × (7 + 1)) + 20.5 + 1720994.5 – 13 = 2442980.0

จากตัวอย่างนี้ วันที่ 20 กรกฎาคม ค.ศ. 1976 เวลาเที่ยงวัน UT เป็น JD 2442980.00 ในเวลา 18:00 UT จะเป็น JD 2442980.25 และเมื่อถึงวันที่ 21 กรกฎาคม ค.ศ. 1976 เวลาเที่ยงวัน จะเป็น JD 2442981.00 เป็นต้น

ตัวอย่างสูตรการคำนวณ VBA บน Excel ตามสูตรนี้คือการเปลี่ยนวันในช่วงเวลาเที่ยง
Function julianday(d, m, y As Double) As Double
Dim a, b As Double
If m = 1 Or m = 2 Then
y = y - 1
m = m + 12
End If
a = Int(y / 100)
b = 2 - a + Int(a / 4)
julianday = Int(365.25 * y) + Int(30.6001 * (m + 1)) + d + 1720994.5 + b
End Function

ตัวอย่างสูตรการคำนวณ VBA บน Excel กรณีไม่เปลี่ยนวันในช่วงเวลาเที่ยง
Function mdy2jday(d, m, y As Double) As Double
    Dim im  As Double, J  As Double
    im = (12 * y) + m + 57597
    J = (2 * (im - Int(im / 12) * 12) + 7 + 365 * im) / 12
    J = Int(J) + d + Int(im / 48) - 32083
    If J > 2299171 Then
        J = J + Int(im / 4800) - Int(im / 1200) + 38
    End If
    mdy2jday = J
End Function
หมายเหตุ : ค่าที่ได้จะเป็นจำนวนเต็มของจำนวนวันจูเลียนนั้น ไม่เปลี่ยนวันในเวลา 12.00 น.

ธีรพร เพชรกำแพง

24 กุมภาพันธ์ 2559