وحدة:HijriDate: الفرق بين النسختين
المظهر
أنشأ الصفحة ب'local p = {} -- تبدیل میلادی به هجری قمری (الگوریتم استاندارد) local function gregorian_to_jd(y, m, d) if m <= 2 then y = y - 1 m = m + 12 end local A = math.floor(y / 100) local B = 2 - A + math.floor(A / 4) return math.floor(365.25 * (y + 4716)) + math.floor(30.6001 * (m + 1)) + d + B - 1524.5 end local function jd_to_hijri(jd) jd = math.floor(jd) + 0.5 local days = jd - 1948439.5 local h_year = math.floor((...' |
لا ملخص تعديل |
||
| سطر ١: | سطر ١: | ||
local p = {} | local p = {} | ||
local hijri_months = { | |||
"محرم", | |||
"صفر", | |||
"ربيع الأول", | |||
"ربيع الآخر", | |||
"جمادى الأولى", | |||
"جمادى الآخرة", | |||
"رجب", | |||
"شعبان", | |||
"رمضان", | |||
"شوال", | |||
"ذو القعدة", | |||
"ذو الحجة" | |||
} | |||
local function gregorian_to_jd(y, m, d) | local function gregorian_to_jd(y, m, d) | ||
if m <= 2 then | if m <= 2 then | ||
| سطر ١١: | سطر ٢٥: | ||
return math.floor(365.25 * (y + 4716)) | return math.floor(365.25 * (y + 4716)) | ||
+ math.floor(30.6001 * (m + 1)) | + math.floor(30.6001 * (m + 1)) | ||
+ d + B - 1524 | + d + B - 1524 | ||
end | end | ||
function hijri_to_jd(y, m, d) | local function hijri_to_jd(y, m, d) | ||
return d | return d | ||
+ math.ceil(29.5 * (m - 1)) | + math.ceil(29.5 * (m - 1)) | ||
+ (y - 1) * 354 | + (y - 1) * 354 | ||
+ math.floor((3 + 11 * y) / 30) | + math.floor((3 + 11 * y) / 30) | ||
+ | + 1948440 | ||
end | end | ||
local | local function jd_to_hijri(jd) | ||
local days = jd - 1948440 | |||
local h_year = math.floor((30 * days + 10646) / 10631) | |||
local first_day = hijri_to_jd(h_year, 1, 1) | |||
local h_month = math.min(12, math.ceil((jd - first_day) / 29.5) + 1) | |||
local h_day = jd - hijri_to_jd(h_year, h_month, 1) + 1 | |||
return h_day, h_month, h_year | |||
end | |||
function p.today() | function p.today() | ||
| سطر ٥١: | سطر ٤٩: | ||
local jd = gregorian_to_jd(t.year, t.month, t.day) | local jd = gregorian_to_jd(t.year, t.month, t.day) | ||
local d, m, y = jd_to_hijri(jd) | local d, m, y = jd_to_hijri(jd) | ||
return | |||
local month_name = hijri_months[m] or "؟" | |||
return d .. " " .. month_name .. " " .. y .. " هـ" | |||
end | end | ||
return p | return p | ||
مراجعة ١٣:٢٤، ١ يناير ٢٠٢٦
يمكن إنشاء صفحة توثيق الوحدة في وحدة:HijriDate/شرح
local p = {}
local hijri_months = {
"محرم",
"صفر",
"ربيع الأول",
"ربيع الآخر",
"جمادى الأولى",
"جمادى الآخرة",
"رجب",
"شعبان",
"رمضان",
"شوال",
"ذو القعدة",
"ذو الحجة"
}
local function gregorian_to_jd(y, m, d)
if m <= 2 then
y = y - 1
m = m + 12
end
local A = math.floor(y / 100)
local B = 2 - A + math.floor(A / 4)
return math.floor(365.25 * (y + 4716))
+ math.floor(30.6001 * (m + 1))
+ d + B - 1524
end
local function hijri_to_jd(y, m, d)
return d
+ math.ceil(29.5 * (m - 1))
+ (y - 1) * 354
+ math.floor((3 + 11 * y) / 30)
+ 1948440
end
local function jd_to_hijri(jd)
local days = jd - 1948440
local h_year = math.floor((30 * days + 10646) / 10631)
local first_day = hijri_to_jd(h_year, 1, 1)
local h_month = math.min(12, math.ceil((jd - first_day) / 29.5) + 1)
local h_day = jd - hijri_to_jd(h_year, h_month, 1) + 1
return h_day, h_month, h_year
end
function p.today()
local t = os.date("*t")
local jd = gregorian_to_jd(t.year, t.month, t.day)
local d, m, y = jd_to_hijri(jd)
local month_name = hijri_months[m] or "؟"
return d .. " " .. month_name .. " " .. y .. " هـ"
end
return p