Modul:Death date and age
Dokumentasi untuk modul ini dapat dibuat di Modul:Death date and age/doc
local p = {}
-- Nama bulan dalam bahasa Indonesia
local months = {
"Januari", "Februari", "Maret", "April", "Mei", "Juni",
"Juli", "Agustus", "September", "Oktober", "November", "Desember"
}
-- Fungsi untuk mengurai/parse string YYYY-MM-DD
local function parseDateString(str)
if not str then return nil, nil, nil end
local y, m, d = str:match("(%d%d%d%d)[%-/](%d%d?)[%-/](%d%d?)")
if y and m and d then
return tonumber(y), tonumber(m), tonumber(d)
end
return nil, nil, nil
end
-- Fungsi menghitung umur pada saat meninggal
local function calculateAgeAtDeath(bYear, bMonth, bDay, dYear, dMonth, dDay)
local age = dYear - bYear
if dMonth < bMonth or (dMonth == bMonth and dDay < bDay) then
age = age - 1
end
return age
end
function p.main(frame)
local args = frame:getParent().args
local dYear, dMonth, dDay
local bYear, bMonth, bDay
-- Skenario 1: Menggunakan string format YYYY-MM-DD (2 parameter string: Parameter 1 = Wafat, Parameter 2 = Lahir)
if args[1] and tostring(args[1]):find("%d%d%d%d") and args[2] and tostring(args[2]):find("%d%d%d%d") then
dYear, dMonth, dDay = parseDateString(args[1])
bYear, bMonth, bDay = parseDateString(args[2])
end
-- Skenario 2: Menggunakan parameter terpisah (6 parameter: Wafat_Thn|Wafat_Bln|Wafat_Tgl|Lahir_Thn|Lahir_Bln|Lahir_Tgl)
if not (dYear and bYear) then
dYear = tonumber(args[1] or args.dyear)
dMonth = tonumber(args[2] or args.dmonth)
dDay = tonumber(args[3] or args.dday)
bYear = tonumber(args[4] or args.byear)
bMonth = tonumber(args[5] or args.bmonth)
bDay = tonumber(args[6] or args.bday)
end
-- Validasi Tanggal
if not dYear or not dMonth or not dDay or not bYear or not bMonth or not bDay or
dMonth < 1 or dMonth > 12 or dDay < 1 or dDay > 31 or
bMonth < 1 or bMonth > 12 or bDay < 1 or bDay > 31 then
return '<span style="color:red; font-weight:bold;">[Format Tanggal Meninggal/Lahir Salah]</span>'
end
local age = calculateAgeAtDeath(bYear, bMonth, bDay, dYear, dMonth, dDay)
-- Cek jika tanggal meninggal lebih awal dari tanggal lahir
if age < 0 then
return '<span style="color:red; font-weight:bold;">[Tanggal Meninggal Tidak Boleh Sebelum Tanggal Lahir]</span>'
end
local monthName = months[dMonth] or ""
-- Format Output: "20 Mei 2020 (umur 50)"
return string.format('%d %s %d <span class="force-break">(umur %d)</span>', dDay, monthName, dYear, age)
end
return p