มอดูล:ตัวอย่างหรคุณจูเลียน

--
มอดูล: ตัวอย่างหรคุณจูเลียน
ประโยชน์: สำหรับแสดงตัวอย่างการคำนวณในบทความ หรคุณจูเลียน และ สงกรานต์ เนื่องจากการแสดงตัวอย่างโดยคำสั่ง #expr:
แก้ไขได้ยาก อ่านเข้าใจยาก มอดูลนี้ไม่ใช้ในการคำนวณหรคุณจูเลียน สำหรับเครื่องมือในการคำนวณ โปรดดู แม่แบบ:หรคุณจูเลียน
วิธีการเรียกใช้งานพึงปฏิบัติดังนี้
ในมอดูลนี้มีฟัง5 ชัน 6 ฟังก์ชันด้วยกัน คือ
1. calcjd(yr,mo,dy,hr,mn,sc,lineno) หาหรคุณจูเลียน
2. calcjd2(yr,mo,dy,hr,mn,sc,lineno)
3. calcdatefromjd(jd,lineno) หาวันที่จากหรคุณจูเลียน ณ เวลา 12 นาฬิกา
4. calcdatefromhd2(jd,lineno)
5. jdnewariesandnewyear(yr,mode,lineno) หาหรคุณจูเลียน ณ วันมหาสงกรานต์ ถ้า mode = 1 หรือหาหรคุณจูเลียน ณ วันเถลิงศก ถ้า mode เป็นค่าอื่น
กำหนด วันที่ dy เดือน mo ปีคริสตศักราช  yr ส่วน lineno แทนลำดับของตัวแปรที่จะส่งออกไปประกอบตัวอย่าง
--
local p = {}
function p.calcjd(frame)
-- ในวิกิการระบุตัวแปรรับเข้าทุกตัวไว้ในวงเล็บเริ่มฟังก์ชันไม่สามารถทำได้ แต่ภาษาลูอาปกติรองรับ
-- การกระทำดังกล่าว เช่นเดียวกับภาษาอื่น
local yr = tonumber(frame.args1)
local mo = tonumber(frame.args2)
local dy = tonumber(frame.args3)
	local lineno = tonumber(frame.args4)
	
	local line1 = math.floor((1461 * (yr + 4800 + math.floor((mo - 14)/12)))/4)
	local line2 = math.floor((367 * (mo - 2 - 12 * math.floor((mo - 14)/12)))/12)
	local line3 = math.floor((3 * math.floor((yr + 4900 + math.floor((mo - 14)/12))/100))/4)  
	local line4 = dy - 32077
	local jd = line1 + line2 - line3 + line4
	local result
if lineno == 1 then
result = line1
elseif lineno == 2 then
result = line2
elseif lineno == 3 then
result = line3
elseif lineno == 4 then
result = line4
else
result = jd
end
	return result
end
function p.calcjd2(frame)
--
ดูเพิ่ม Meeus, Jean (1998). Astronomical Algorithms. Willman Bell. pp. 60–61.
--
local yr = tonumber(frame.args1)
local mo = tonumber(frame.args2)
local dy = tonumber(frame.args3)
local lineno = tonumber(frame.args4)

if mo 2 then
yr = C - 4716
else
yr = C - 4715
end

local result
if lineno == 1 then
result = z
elseif lineno == 2 then
result = A
elseif lineno == 3 then
result = B
elseif lineno == 4 then
result = C
elseif lineno == 5 then
result = D
elseif lineno == 6 then
result = E
elseif lineno == 7 then
result = dy
elseif lineno == 8 then
result = mo
else
result = yr
end

return result
end
function p.jdnewariesandnewyear(frame)
--
คำนวณหรคุณ ณ เวลาสงกรานต์เสด็จ ของปี จ.ศ. y - 638 เมื่อ y เป็น ค.ศ.
--
yr = tonumber(frame.args1)
mode = tonumber(frame.args2)
lineno = tonumber(frame.args3)
local sd0, sd, jd0, jd
if mode == 1 then
	sd0 = ((yr-638)*292207-1359)/800
else
	sd0 = ((yr-638)*292207+373)/800
end

jd0 = sd0 + 1954167.5
-- เศษเวลา
local timefrac1 = jd0 - math.floor(jd0)

if timefrac1 >= 0.5 then
-- ทศนิยมของหรคุณจูเลียน เถิน 0.5 เป็นวันใหม่ทางสุริยคติ ต้องลบออกเสีย 0.5 ก่อนคิดเวลา
timefrac2 = timefrac1 - 0.5
jd = math.floor(jd0) + 1
else
-- ทศนิยมน้อยกว่า 0.5 เลยเที่ยงวันมา ต้องเอา 0.5 บวกก่อนคิดเวลา
timefrac2 = timefrac1 + 0.5
jd = math.floor(jd0)
end

local hr = math.floor(timefrac2*24)
local rem = timefrac2*24 - hr
local mn = math.floor(rem*60)
local rem2 = rem*60 - mn
local sc = math.floor(rem2*60)
local rem3 = rem2*60 - sc
local result
if lineno == 1 then
result = sd0
elseif lineno == 2 then
result = jd0
elseif lineno == 3 then
result = sd
elseif lineno == 4 then
result = jd
elseif lineno == 5 then
result = timefrac1
elseif lineno == 6 then
result = timefrac2
elseif lineno == 7 then
result = hr
elseif lineno ==8 then
result = rem
elseif lineno == 9 then
result = mn
elseif lineno == 10 then
result = rem2
elseif lineno == 11 then
result = sc
else
result = rem3
end
return result
end
return p