Module:BENGALIDATE/sandbox
Appearance
![]() | This is the module sandbox page for Module:BENGALIDATE (diff). |
![]() | This module depends on the following other modules: |
Usage
[edit]{{BENGALIDATE}}
gives current date based on the revised Bengali calendar (which is officially adopted for use in Bangladesh), and gets automatically updated everyday past mid-night Bangladesh time. Use {{BENGALIYEAR}}
also to show Bengali Era (BS).
</noinclude>
local p = {}
local data = mw.loadData('Module:BENGALIDATE/data')
local lang = mw.language.getContentLanguage()
local getArgs = require('Module:Arguments').getArgs
local now = os.time()
local cTime = now + (6 * 60 * 60)
local currentDate = os.date("%d %B %Y", cTime)local cday = tonumber(os.date("%d", cTime))
local cmonth = tonumber(os.date("%m", cTime))
local function uc(value)
return lang:ucfirst(value)
end
local function dmy(i)
local date = i
local day, month, year = date:match("(%d%d?) (%a+) (%d%d%d%d)")
return tonumber(day), month , year
end
-- BN month
local function getBNmonth (day, month)
local day = tonumber(day)
local bnMonth = {
January = {15, "Magh", "Poush"},
February = {14, "Falgun", "Magh"},
March = {15, "Chaitra", "Falgun"},
April = {14, "Boishakh", "Chaitra"},
May = {15, "Joishtho", "Boishakh"},
June = {15, "Asharh", "Joishtho"},
July = {15, "Shrabon", "Asharh"},
August = {15, "Bhadro", "Shrabon"},
September = {15, "Ashwin", "Bhadro"},
October = {15, "Kartik", "Ashwin"},
November = {15, "Agrahayan", "Kartik"},
December = {15, "Poush", "Agrahayan"}
}
local dateLimit, bnMafter, bnMbefore = unpack(bnMonth[month])
if day >= dateLimit then
return bnMafter
else
return bnMbefore
end
end
-- BN Year
local function getBNyear(day, month, year)
local bn_year
local cmonth = tonumber(month)
local cday = tonumber(day)
local aprilfourteen = cmonth*20+cday > 93
if aprilfourteen then
bn_year = tonumber(year) - 593
else
bn_year = tonumber(year) - 594
end
return bn_year
end
-- BN day
local function getBNday(day, month, year)
local bn_year = getBNyear(day, lang:ucfirst(month), year) -- Call the year function here
local day = tostring(day)
local bn_day = data[month][day]
local leapYear = tonumber(year) % 4 == 0 and (tonumber(year) % 100 ~= 0 or tonumber(year) % 400 == 0)
if leapYear and uc(month) == "March" and day >= 1 and day <= 14 then
bn_day = bn_day + 1
return bn_day
end
return bn_day
end
-- formatter
local function format_date(day, month, year, format)
local components = { d = day, m = month, y = year }
local result = {}
for i = 1, #format do
local char = format:sub(i, i)
if components[char] then
table.insert(result, components[char])
else
table.insert(result, char)
end
end
return table.concat(result)
end
-- Main Function
function p.main(frame)
local args = getArgs(frame)
local format = args[2] or args['format'] or 'm d y'
if format == '' then
format = 'm d y'
end
local input = args[1] or currentDate
local gday, gmonth, gyear = dmy(input)
if not gday then
gday, gmonth, gyear = dmy(currentDate)
format = args[1]
if format == '' then format = 'm d y'
end
end
local byear = getBNyear(gday,gmonth,gyear)
local bmonth = getBNmonth(gday, gmonth)
local bday = getBNday(gday,gmonth,gyear)
local dmy = format_date(bday,bmonth,byear,format)
return dmy
end
return p