Modul:LinkFormDatum: Unterschied zwischen den Versionen

linkFormDate() zusätzlich ISO-P case YYYY-MM-DD
Keine Bearbeitungszusammenfassung
(linkFormDate() zusätzlich ISO-P case YYYY-MM-DD)
 
(57 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local c = require( "Module:Common" )
local c = require( "Module:Common" )
local str = require("Modul:String")


function p.ParseFormDate( frame )
function p.LinkFormDate(frame)
pf = frame:getParent()
-- #invoke wrapper
args = pf.args
local args = frame.args
    return p.linkFormDate(args[1], args[2], args[3], args[4])
end
 
function p.linkFormDate(date, attr_date, attr_day, attr_year)
    local months = c.getMonthList()
    local date_array
    local mda
    local mn -- monthname
 
if string.find(date, "/") ~= nil then -- regular case YYYY/MM/DD
    date_array = str.split(date, "/")
    else -- ISO-P case YYYY-MM-DD
    date_array = str.split(date, "-")
    end
   
    -- wenn keine Attribute übergeben, werden keine gesetzt, sondern nur Links eingebaut
    if attr_day ~= nil then
    attr_day = attr_day .. "::"
    else
    attr_day = ""
    end
    if attr_year ~= nil then
    attr_year = attr_year .. "::"
    else
    attr_year = ""
    end
    if attr_date ~= nil then
    mw.smw.set({[attr_date] = date})
    end
    if c.isEmpty(date_array[2]) then
    -- When datestring contained no "/"
    if c.isInteger(date_array[1]) then
    -- When dateformat is just YYYY
    return "[[" .. attr_year .. date_array[1] .. "]]"
    else
    -- Dateformat is <monthname> YYYY
    mda = str.split(date_array[1])
    return mda[1] .. " [[" .. attr_year .. mda[2] .. "]]"
    end
    elseif c.isEmpty(date_array[3]) then
    -- Datestring contained one "/"
    mn = months[tonumber(date_array[2])]
    return mn .. " [[" .. attr_year .. date_array[1] .. "]]"
    else
    -- Dateformat should be YYYY/MM/DD or YYYY-MM-DD
    mn = months[tonumber(date_array[2])]
    date_array[3] = date_array[3]:gsub('0*', '', 1)
    return "[[" .. attr_day .. date_array[3] .. ". " .. mn .. "]]" ..
    " [[" .. attr_year .. date_array[1] .. "]]"
    end
end
 
function p.FormatDate(frame)
-- #invoke wrapper
return p.formatDate(frame.args[1])
end
 
function p.formatDate(date)
local date_array = str.split(date, " ")
local day
mn={
if c.isEmpty(date_array[2]) then
[1] = "Januar",
    -- When datestring contained no " ", thus is year
[2] = "Februar",
    return "[[" .. date_array[1] .. "]]"
[3] = "März",
elseif c.isEmpty(date_array[3]) then
[4] = "April",
-- When datestring contains monthname and year
[5] = "Mai",
return date_array[1] .. " [[" .. date_array[2] .. "]]"
[6] = "Juni",
else
[7] = "Juli",
-- When datestring contains day, monthname and year
[8] = "August",
day = string.gsub(date_array[1], "%.", "")
[9] = "September",
return "[[" .. day .. ". " .. date_array[2] .. "]] " ..
[10] = "Oktober",
"[[" .. date_array[3] .. "]]"
[11] = "November",
end
[12] = "Dezember"}
end
 
function p.HumanToFormDate(frame)
-- #invoke wrapper
return p.humanToFormDate(frame.args[1])
end
 
function p.humanToFormDate(date)
mw.log("p.humanToFormDate(date)")
mw.logObject(date)
-- Converts a human date (3. Februar 1955) to 1955/02/03, like SMW needs
local date_array=str.split(date, " ")
local day
local mnr -- monthnr
date = args[1]
if c.isEmpty(date_array[2]) then
attr_date = args[2]
-- When datestring contained no " ", thus is year
attr_day = args[3]
return date_array[1]
attr_year = args[4]
elseif c.isEmpty(date_array[3]) then
   
-- When datestring contains monthname and year
    date_array=split(date, "/")
return date_array[1].." "..date_array[2]
    l=string.len(date_array[0])
else
t="[["..date_array[0].."]] " .. l .. tostring(isInteger(date_array[0]))
day = string.gsub(date_array[1], "%.", "")
return t
day = string.format("%02d", day)
mnr = c.getMonthnr(date_array[2])
mnr = string.format("%02d", mnr)
return date_array[3] .. "/" .. mnr .. "/" .. day
end
end
end


return p
return p