Jump to content

Module:Sandbox/R1F4T

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by R1F4T (talk | contribs) at 06:46, 23 April 2025. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

-- Return true if Bengali year is leap
local function isLeapYear(year)
	return ((year - 594) % 4 == 0)
end

-- Convert number to Bengali digits
local function toBengaliNumber(num)
	local bnDigits = {'০','১','২','৩','৪','৫','৬','৭','৮','৯'}
	return tostring(num):gsub("%d", function(d) return bnDigits[tonumber(d)+1] end)
end

function p.unixToBengaliDate(frame)
	local timestamp = tonumber(frame.args[1])
	local second = 86400
	local days = math.floor(timestamp / second)

	local year = 1432  -- Adjust according to your epoch

	if days >= 0 then
		while true do
			local leap = isLeapYear(year) and 366 or 365
			if days < leap then break end
			days = days - leap
			year = year + 1
		end
	else
		while true do
			local leap = isLeapYear(year - 1) and 366 or 365
			if -days <= leap then
				year = year - 1
				days = days + leap
				break
			end
			days = days + leap
			year = year - 1
		end
	end

	local isLeap = isLeapYear(year)
	local monthLengths = {31,31,31,31,31,31,30,30,30,30,30, isLeap and 30 or 29}
	local month = 1

	while days >= monthLengths[month] do
		days = days - monthLengths[month]
		month = month + 1
	end

	local day = days + 1

	return string.format("%s-%s-%s", toBengaliNumber(day), toBengaliNumber(month), toBengaliNumber(year))
end

return p