Module:IxTime: Difference between revisions

From IxWiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 6: Line 6:
function p.convertToIxTime(inputTime)
function p.convertToIxTime(inputTime)
     if type(inputTime) == "table" then
     if type(inputTime) == "table" then
        -- Ensure all necessary fields are present
        inputTime.year = inputTime.year or os.date("*t").year
        inputTime.month = inputTime.month or 1
        inputTime.day = inputTime.day or 1
        inputTime.hour = inputTime.hour or 0
        inputTime.min = inputTime.min or 0
        inputTime.sec = inputTime.sec or 0
         inputTime = os.time(inputTime)
         inputTime = os.time(inputTime)
     end
     end
Line 23: Line 30:
     local month = tonumber(args[2] or args.month)
     local month = tonumber(args[2] or args.month)
     local day = tonumber(args[3] or args.day)
     local day = tonumber(args[3] or args.day)
     local hour = tonumber(args[4] or args.hour or "0")
     local hour = tonumber(args[4] or args.hour or 0)
     local minute = tonumber(args[5] or args.minute or "0")
     local minute = tonumber(args[5] or args.minute or 0)
     local second = tonumber(args[6] or args.second or "0")
     local second = tonumber(args[6] or args.second or 0)


     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 = {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 ixTime = p.convertToIxTime(inputTime)
     local ixTime = p.convertToIxTime(inputTime)
     return p.formatIxTime(ixTime) .. " IX"
     return p.formatIxTime(ixTime) .. " IX"

Revision as of 20:22, 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
        -- Ensure all necessary fields are present
        inputTime.year = inputTime.year or os.date("*t").year
        inputTime.month = inputTime.month or 1
        inputTime.day = inputTime.day or 1
        inputTime.hour = inputTime.hour or 0
        inputTime.min = inputTime.min or 0
        inputTime.sec = inputTime.sec or 0
        inputTime = os.time(inputTime)
    end
    local secondsSinceEpoch = inputTime - EPOCH
    local ixSeconds = secondsSinceEpoch * 4.0
    return EPOCH + ixSeconds
end

function p.formatIxTime(ixTime)
    -- Format the time to match the JavaScript output
    return os.date("!%A, %B %d, %Y %I:%M:%S %p", ixTime)
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)

    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) .. " IX"
end

function p.getCurrentIxTime(frame)
    local currentTime = os.time()
    local ixTime = p.convertToIxTime(currentTime)
    return p.formatIxTime(ixTime) .. " IX"
end

return p