انتقل إلى المحتوى

وحدة: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.5
+ d + B - 1524
end
 
local function jd_to_hijri(jd)
jd = math.floor(jd) + 0.5
local days = jd - 1948439.5
local h_year = math.floor((30 * days + 10646) / 10631)
local h_month = math.min(12,
math.ceil((days - 29 - hijri_to_jd(h_year, 1, 1)) / 29.5) + 1)
local h_day = math.floor(jd - hijri_to_jd(h_year, h_month, 1)) + 1
return h_day, h_month, h_year
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)
+ 1948439.5
+ 1948440
end
end


local hijri_months = {
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 string.format("%d %s %d هـ", d, hijri_months[m], y)
 
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