Module:IxTime: Difference between revisions

From IxWiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


local function getTemplateVar(varName)
-- Ensure this matches the JavaScript epoch
     local frame = mw.getCurrentFrame()
local EPOCH = os.time({year=2020, month=10, day=4, hour=0, minute=0, second=0})
     return tonumber(frame:expandTemplate{ title = 'PAGEVAR', args = { 'IxTime', varName } })
 
function p.convertToIxTime(inputTime)
     if type(inputTime) == "table" then
        inputTime = os.time(inputTime)
     end
    local secondsSinceEpoch = inputTime - EPOCH
    local ixSeconds = secondsSinceEpoch / 4.0  -- Divide by 4 to slow down time before epoch
    return EPOCH + ixSeconds
end
end


local EPOCH = getTemplateVar('ixtime_epoch')
function p.formatIxTime(ixTime, includeTime)
local MULTIPLIER = getTemplateVar('ixtime_multiplier')
    local ixDate = os.date("!*t", ixTime)
    local months = {
        "January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
    }
    local weekdays = {
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    }
    if includeTime then
        return string.format("%s, %s %d, %d %02d:%02d:%02d (ILT)",
            weekdays[ixDate.wday],
            months[ixDate.month],
            ixDate.day,
            ixDate.year,
            ixDate.hour,
            ixDate.min,
            ixDate.sec
        )
    else
        return string.format("%s, %s %d, %d (ILT)",
            weekdays[ixDate.wday],
            months[ixDate.month],
            ixDate.day,
            ixDate.year
        )
    end
end


function p.convertToIxTime(frame)
function p.convertDateToIxTime(frame)
     local args = frame.args
     local args = frame.args
     local year = tonumber(args[1])
     local year = tonumber(args[1] or args.year)
     local month = tonumber(args[2])
     local month = tonumber(args[2] or args.month)
     local day = tonumber(args[3])
     local day = tonumber(args[3] or args.day)
     local hour = tonumber(args[4] or "0")
     local hour = tonumber(args[4] or args.hour or 0)
     local minute = tonumber(args[5] or "0")
     local minute = tonumber(args[5] or args.minute or 0)
     local second = tonumber(args[6] or "0")
     local second = tonumber(args[6] or args.second or 0)
    local includeTime = args[7] or args.includeTime


     if not year or not month or not day then
     if not year or not month or not day then
         return "Error: Invalid date format"
         return "Error: Invalid date format. Please provide at least year, month, and day."
     end
     end


     local inputTime = os.time({year=year, month=month, day=day, hour=hour, minute=minute, second=second})
     local inputTime = {year=year, month=month, day=day, hour=hour, min=minute, sec=second}
     local secondsSinceEpoch = inputTime - EPOCH
     local ixTime = p.convertToIxTime(inputTime)
     local ixTime = math.floor(secondsSinceEpoch * MULTIPLIER + EPOCH)
     return p.formatIxTime(ixTime, includeTime == "yes")
end


     local ixDate = os.date("!%A, %B %d, %Y %H:%M:%S", ixTime)
function p.getCurrentIxTime(frame)
     return ixDate .. " IX"
     local includeTime = frame.args[1] or frame.args.includeTime
    local currentTime = os.time()
    local ixTime = p.convertToIxTime(currentTime)
     return p.formatIxTime(ixTime, includeTime == "yes")
end
end


return p
return p

Latest revision as of 21:33, 3 August 2024

Documentation for this module may be created at Module:IxTime/doc

local p = {}

-- Ensure this matches the JavaScript epoch
local EPOCH = os.time({year=2020, month=10, day=4, hour=0, minute=0, second=0})

function p.convertToIxTime(inputTime)
    if type(inputTime) == "table" then
        inputTime = os.time(inputTime)
    end
    local secondsSinceEpoch = inputTime - EPOCH
    local ixSeconds = secondsSinceEpoch / 4.0  -- Divide by 4 to slow down time before epoch
    return EPOCH + ixSeconds
end

function p.formatIxTime(ixTime, includeTime)
    local ixDate = os.date("!*t", ixTime)
    local months = {
        "January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
    }
    local weekdays = {
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    }
    if includeTime then
        return string.format("%s, %s %d, %d %02d:%02d:%02d (ILT)",
            weekdays[ixDate.wday],
            months[ixDate.month],
            ixDate.day,
            ixDate.year,
            ixDate.hour,
            ixDate.min,
            ixDate.sec
        )
    else
        return string.format("%s, %s %d, %d (ILT)",
            weekdays[ixDate.wday],
            months[ixDate.month],
            ixDate.day,
            ixDate.year
        )
    end
end

function p.convertDateToIxTime(frame)
    local args = frame.args
    local year = tonumber(args[1] or args.year)
    local month = tonumber(args[2] or args.month)
    local day = tonumber(args[3] or args.day)
    local hour = tonumber(args[4] or args.hour or 0)
    local minute = tonumber(args[5] or args.minute or 0)
    local second = tonumber(args[6] or args.second or 0)
    local includeTime = args[7] or args.includeTime

    if not year or not month or not day then
        return "Error: Invalid date format. Please provide at least year, month, and day."
    end

    local inputTime = {year=year, month=month, day=day, hour=hour, min=minute, sec=second}
    local ixTime = p.convertToIxTime(inputTime)
    return p.formatIxTime(ixTime, includeTime == "yes")
end

function p.getCurrentIxTime(frame)
    local includeTime = frame.args[1] or frame.args.includeTime
    local currentTime = os.time()
    local ixTime = p.convertToIxTime(currentTime)
    return p.formatIxTime(ixTime, includeTime == "yes")
end

return p