Module:Sandbox/DixonD/DateTemplates

This is an old revision of this page, as edited by DixonD (talk | contribs) at 11:47, 20 April 2013. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local DateTime = require("Module:Sandbox/DixonD/Datetime");
local Math = require("Module:Math");

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(frame, args[1]),
        Math._cleanNumber(frame, args[2]), Math._cleanNumber(frame, args[3]),
        Math._cleanNumber(frame, args[4]), Math._cleanNumber(frame, args[5]),
        Math._cleanNumber(frame, args[6]), 'g');
end

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

-- [[Template:Gregorian serial date]]
function z.gregorianSerialDate(frame)
    local args = getArgs(frame);
    
    local julianDay = DateTime.julianDay(Math._cleanNumber(frame, args.year),
        Math._cleanNumber(frame, args.month),
        Math._cleanNumber(frame, args.day), nil, nil, nil, 'g');
    
    if isError(julianDay) then return julianDay; end;
    
    return julianDay - 1721425;
end

return z