Modul:Age
Dokumentasjon for modulen kan opprettast på Modul:Age/dok
local h = {}
local months = {
['jan'] = 'January',
['januar'] = 'January',
['feb'] = 'February',
['februar'] = 'February',
['mar'] = 'March',
['mars'] = 'March',
['apr'] = 'April',
['april'] = 'April',
['mai'] = 'May',
['jun'] = 'June',
['juni'] = 'June',
['jul'] = 'July',
['juli'] = 'July',
['aug'] = 'August',
['august'] = 'August',
['sep'] = 'September',
['september'] = 'September',
['okt'] = 'October',
['oktober'] = 'October',
['nov'] = 'November',
['november'] = 'November',
['des'] = 'December',
['desember'] = 'December',
}
local lang = mw.language.getContentLanguage()
local function translate( date )
local day, month, year
local i, j
i, j = mw.ustring.find( date, "^%d+")
if not i then
return date
end
day = mw.ustring.sub( date, i, j )
if not tonumber( day ) then
return date
end
i, j = mw.ustring.find( date, "%s%a+", j )
if not i then
return date
end
month = months[mw.ustring.sub( date, i+1, j )]
if not month then
return date
end
i, j = mw.ustring.find( date, "%s%d+", j )
if not i then
return date
end
year = mw.ustring.sub( date, i+1, j )
if not tonumber( day ) then
return date
end
return mw.ustring.format( "%s %s %s", day, month, year )
end
local function getYear( date )
return tonumber( lang:formatDate( 'Y', date, true ) )
end
local function getMonth( date )
return tonumber( lang:formatDate( 'n', date, true ) )
end
local function getDate( date )
return tonumber( lang:formatDate( 'j', date, true ) )
end
local function duration( first, last )
local age = getYear( last ) - getYear( first )
if getMonth( last ) < getMonth( first ) then
age = age - 1
elseif getMonth( last ) == getMonth( first ) then
if getDate( last ) < getDate( first ) then
age = age - 1;
end
end
return age
end
function h.duration( frame )
local first = frame.args['first'] or frame.args[1]
if not first or mw.ustring.find( first, '^%s$' ) then
return ''
end
first = translate( mw.ustring.gsub( first, "<[^>]+>", "" ) )
local last = frame.args['last'] or frame.args[2]
if not last or mw.ustring.find( last, '^%s$' ) then
last = mw.language.getContentLanguage():formatDate( 'Y-m-d' )
if not last or mw.ustring.find( last, '^%s$' ) then
return ''
end
end
last = translate( mw.ustring.gsub( last, "<[^>]+>", "" ) )
local res, age = pcall( duration, first, last )
if not res or age < 0 then
return ''
end
local msg = mw.message.new( 'gadget-age-years-plain' ); -- this can't handle plural
if not msg:exists() then
msg = mw.message.newRawMessage( '($1 years)' )
end
if not msg:exists() then
return ''
end
msg:numParams( age )
return msg:plain()
end
return h