Module:BENGALIDATE and Module:BENGALIDATE/sandbox: Difference between pages

(Difference between pages)
Jump to navigation Jump to search
Page 1
Page 2
imported>R1F4T
No edit summary
 
imported>R1F4T
No edit summary
 
Line 1: Line 1:
local p = {}
local p = {}
local data = mw.loadData('Module:BENGALIDATE/data')
local lang = mw.language.getContentLanguage()
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local timestamp = require('Module:Bengali Calendar Epoch Offset')._main
 
local function isLeapYear(year)
local now = os.time()
return ((year - 594) % 4 == 0)
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
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 function format_date(day, month, year, format)
     local components = { d = day, m = month, y = year }
     local components = { d = day, m = month, y = year }
Line 20: Line 85:
     return table.concat(result)
     return table.concat(result)
end
end
local BN_MONTH = {
 
[1] = "Boisakh",
 
[2] = "Joishtho",
-- Main Function
[3] = "Asharh",
[4] = "Shrabon",
[5] = "Bhadro",
[6] = "Ashshin",
[7] = "Kartik (month)",
[8] = "Ogrohayon",
[9] = "Poush",
[10] = "Magh",
[11] = "Falgun",
[12] = "Chaitro"
}
function p.main(frame)
function p.main(frame)
local args = getArgs(frame)
local args = getArgs(frame)
local ts = args[1] or tostring(timestamp())
local format = args[2] or args['format'] or 'm d y'
local format = "m d, y"
if format == '' then
    local isdate = ts:match("^%d+%-%d+%-%d+$") or ts:match("^%d+%s+%a+%s+%d+$")
format = 'm d y'
    if isdate then
end
      ts =tonumber(timestamp(ts))
    else
local input = args[1] or currentDate
    ts = tonumber(timestamp(args[2]))
local gday, gmonth, gyear = dmy(input)
    format = args[1] or "m d, y"
    end
local second = 86400
if not gday then
local days = math.floor(ts / second)
    gday, gmonth, gyear = dmy(currentDate)
 
    format = args[1]
local year = 1432  -- Adjust according to your epoch
    if format == '' then format = 'm d y'
 
    end
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
end
 
    local byear = getBNyear(gday,gmonth,gyear)
local isLeap = isLeapYear(year)
local bmonth = getBNmonth(gday, gmonth)
local monthLengths = {31,31,31,31,31,31,30,30,30,30,30, isLeap and 30 or 29}
local bday = getBNday(gday,gmonth,gyear)
local month = 1
 
local dmy = format_date(bday,bmonth,byear,format)
while days >= monthLengths[month] do
return dmy
days = days - monthLengths[month]
month = month + 1
end
month = BN_MONTH[month]
 
local day = days + 1
 
return format_date(day, month, year, format)
end
end


return p
return p