Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Sandbox/DixonD/DateTemplates

From Wikipedia, the free encyclopedia
local DateTime = require("Module:Sandbox/DixonD/Datetime");
local Math = require("Module:Math");
local Error = require('Module:Error')

local z = {}

-- utility functions
local function getArgs(frame)
    local args = frame.args;
    
    -- if there are any arguments, then assume that we've got proper ones
    for k,v in pairs(args) do 
        return args
    end
    
    -- otherwise, return args from the parent
    local parent = frame:getParent();
    return parent.args;
end

local function isError(response)
    return type(response) == 'string' and string.find(response, 'error');
end

--template implementations

-- [[Template:JULIANDAY]]
function z.julianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.julianDay(Math._cleanNumber(args[1]),
        Math._cleanNumber(args[2]), Math._cleanNumber(args[3]),
        Math._cleanNumber(args[4]), Math._cleanNumber(args[5]),
        Math._cleanNumber(args[6]), 'g');
end

-- [[Template:JULIANDAY.YEAR]]
function z.yearOfJulianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.yearOfJulianDay(Math._cleanNumber(args[1]), 'g');
end

-- [[Template:JULIANDAY.MONTH]]
function z.monthOfJulianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.monthOfJulianDay(Math._cleanNumber(args[1]), 'g');
end

-- [[Template:JULIANDAY.DAY]]
function z.dayOfJulianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.dayOfJulianDay(Math._cleanNumber(args[1]), 'g');
end

-- [[Template:JULIANDAY.HOUR]]
function z.hourOfJulianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.hourOfJulianDay(Math._cleanNumber(args[1]), 'g');
end

-- [[Template:JULIANDAY.MINUTE]]
function z.minuteOfJulianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.minuteOfJulianDay(Math._cleanNumber(args[1]), 'g');
end

-- [[Template:JULIANDAY.SECOND]]
function z.secondOfJulianDay(frame)
    local args = getArgs(frame);
    
    return DateTime.secondOfJulianDay(Math._cleanNumber(args[1]), 'g');
end

-- [[Template:JULIANDAY.JULIAN]]
function z.julianDayJulian(frame)
    local args = getArgs(frame);
    
    return DateTime.julianDay(Math._cleanNumber(args[1]),
        Math._cleanNumber(args[2]), Math._cleanNumber(args[3]),
        Math._cleanNumber(args[4]), Math._cleanNumber(args[5]),
        Math._cleanNumber(args[6]), 'j');
end

-- [[Template:Gregorian serial date]]
function z.gregorianSerialDate(frame)
    local args = getArgs(frame);
    
    local currentDate = os.date('!*t');
    
    local year = args.year == nil and currentDate.year or Math._cleanNumber(args.year);
    if year == nil then return Error.error{"Parameter ''year'' has wrong format!"}; end;
    
    local month = args.month == nil and currentDate.month or Math._cleanNumber(args.month);
    if month == nil then return Error.error{"Parameter ''month'' has wrong format!"}; end;
    
    local day = args.day == nil and currentDate.day or Math._cleanNumber(args.day);
    if day == nil then return Error.error{"Parameter ''day'' has wrong format!"}; end;
    
    local julianDay = DateTime.julianDay(year, month, day, nil, nil, nil, 'g');
    
    if isError(julianDay) then return julianDay; end;
    
    return julianDay - 1721425;
end

return z