Diese Dokumentation wird von Modul:Time ago/doc aus übernommen. Änderungen können auf der Diskussionsseite vorgeschlagen werden.
Modul:Time ago wird von Modul:Time ago Wikipedia importiert.
Dieses Modul wurde aus der englischen Wikipedia importiert. Obwohl das visuelle Erscheinungsbild unterschiedlich sein kann, ist die Funktionalität identisch. Eine ausführliche Dokumentation finden Sie auf der Wikipedia-Seite.
Modul:Time ago implementiert die Vorlage {{Time ago}}.
-- Implement [[Template:Time ago]]
local yesno -- lazy load
function yesno(arg)
yesno = require('Module:Yesno')
return yesno(arg)
end
local p = {}
-- Table to convert entered text values to numeric values.
local timeText = {
['Sekunden'] = 1,
['Minuten'] = 60,
['Stunden'] = 3600,
['Tagen'] = 86400,
['Wochen'] = 604800,
['Monaten'] = 2629800, -- 365.25 * 24 * 60 * 60 / 12
['Jahren'] = 31557600
}
-- Table containing tables of possible units to use in output.
local timeUnits = {
[1] = { 'Sekunden', 'Sekunden' },
[60] = { 'Minuten', 'Minuten' },
[3600] = { 'Stunden', 'Stunden' },
[86400] = { 'Tagen', 'Tage', 'Tagen' },
[604800] = { 'Wochen', 'Wochen', unit = 'w' },
[2629800] = { 'Monaten', 'Monate', 'Monaten', unit = 'm' },
[31557600] = { 'Jahren', 'Jahre', 'Jahren', unit = 'y' }
}
function p._main( args )
-- Initialize variables
local lang = mw.language.getContentLanguage()
local auto_magnitude_num
local min_magnitude_num
local magnitude = args.magnitude
local min_magnitude = args.min_magnitude
local purge = args.purge
local staticReplaces = {
seconds = '[Ss]ekunden?',
minutes = '[Mm]inuten?',
hours = '[Ss]tunden?',
days = '[Tt]age?n?',
weeks = '[Ww]ochen?',
months = '[Mm]onate?n?',
years = '[Jj]ahre?n?',
}
if args[ 1 ] then
for to, replace in pairs( staticReplaces ) do
args[ 1 ] = args[ 1 ]:gsub( replace, to )
end
end
-- Add a purge link if something (usually "yes") is entered into the purge parameter
if purge then
purge = ' <span class="plainlinks">([' .. mw.title.getCurrentTitle():fullUrl('action=purge') .. ' aktualisieren])</span>'
else
purge = ''
end
-- Check that the entered timestamp is valid. If it isn't, then give an error message.
local success, inputTime = pcall( lang.formatDate, lang, 'xnU', args[1] )
if not success then
return '<strong class="error">Error: first parameter cannot be parsed as a date or time.</strong>'
end
-- Store the difference between the current time and the inputted time, as well as its absolute value.
local isdst = os.date( '*t' ).isdst
local timeDiff = lang:formatDate( 'xnU' ) - inputTime-- + ( ( isdst and 2 or 1 )* 3600 )
local absTimeDiff = math.abs( timeDiff )
if magnitude then
auto_magnitude_num = 0
min_magnitude_num = timeText[magnitude]
else
-- Calculate the appropriate unit of time if it was not specified as an argument.
local autoMagnitudeData = {
{ factor = 2, amn = 31557600 },
{ factor = 2, amn = 2629800 },
{ factor = 2, amn = 86400 },
{ factor = 2, amn = 3600 },
{ factor = 2, amn = 60 }
}
for _, t in ipairs( autoMagnitudeData ) do
if absTimeDiff / t.amn >= t.factor then
auto_magnitude_num = t.amn
break
end
end
auto_magnitude_num = auto_magnitude_num or 1
if min_magnitude then
min_magnitude_num = timeText[min_magnitude]
else
min_magnitude_num = -1
end
end
if not min_magnitude_num then
-- Default to seconds if an invalid magnitude is entered.
min_magnitude_num = 1
end
local result_num
local magnitude_num = math.max( min_magnitude_num, auto_magnitude_num )
local unit = timeUnits[magnitude_num].unit
if unit and absTimeDiff >= 864000 then
local Date = require('Module:Date')._Date
local input = lang:formatDate( 'Y-m-d H:i:s', args[1], true ) -- Date needs a clean date
input = Date(input)
if input then
local id
if input.hour == 0 and input.minute == 0 then
id = 'currentdate'
else
id = 'currentdatetime'
end
result_num = (Date(id) - input):age(unit)
end
end
result_num = result_num or math.floor ( absTimeDiff / magnitude_num )
local punctuation_key, suffix
if timeDiff >= 0 then -- Past
if args.ago == '' then
suffix = ''
else
suffix = (args.ago or 'vor ')
end
else -- Future
if args.ago == '' then
suffix = ''
else
suffix = (args.ago or 'in ')
end
end
if result_num == 1 then
punctuation_key = 1
else
punctuation_key = 2
end
local result_unit = timeUnits[ magnitude_num ][ punctuation_key ]
local result_num_text = tostring( result_num )
-- numeric or string
local numeric_out = args.numeric
local result = ""
if numeric_out then
result = tostring( result_num )
else
if suffix == 'vor ' or suffix == 'in ' then
result_unit = timeUnits[ magnitude_num ][ 1 ]
result = suffix .. result_num_text .. ' ' .. result_unit
else
result = result_num_text .. ' ' .. result_unit .. ' ' .. suffix
end
end
return result .. purge
end
function p.main( frame )
local args = require( 'Module:Arguments' ).getArgs( frame, {
valueFunc = function( k, v )
if v then
v = v:match( '^%s*(.-)%s*$' ) -- Trim whitespace.
if k == 'ago' or v ~= '' then
return v
end
end
return nil
end,
wrappers = 'Template:Time ago'
})
return p._main( args )
end
return p