Zum Inhalt springen

Modul:Zeit

Aus Wikivoyage
Dokumentation für das Modul Zeit[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Submodule

  • Modul:Zeit/Params – enthält ein mehrdimensionales Array mit allen erlaubten Parametern für jede Funktion/Vorlage und ihre Standardbelegung.

Funktionen

Die genaue Schreibweise der zu übergebenen Parameter, und ihre Standardbelegung kann im Submodul Modul:Zeit/Params eingesehen werden.

  • inhalt_zeitraum - Gibt den Text Inhalt aus, wenn das aktuelle Datum in einem definierten Zeitraum liegt, andernfalls wird der Inhalt von std ausgegeben

Verwendung in Vorlagen

Siehe auch

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: Check2
Hinweise
local check = require('Modul:Check2')
local params = mw.loadData('Modul:Zeit/Params')
local lang = mw.language.new ( 'de' );

local zeit = {}

function zeit.inhalt_monat ( frame )
	
	funcParams = params['inhalt_monat']
	args = frame:getParent().args
	
	local januar = args['jan'] or args['januar'] or args['std'] or args['standard'] or funcParams['jan']	
	local februar = args['feb'] or args['februar'] or args['std'] or args['standard'] or funcParams['feb']
	local maerz = args['mar'] or args['maerz'] or args['std'] or args['standard'] or funcParams['mar']	
	local april = args['apr'] or args['april'] or args['std'] or args['standard'] or funcParams['apr']	
	local mai = args['mai'] or args['std'] or args['standard'] or funcParams['mai']	
	local juni = args['jun'] or args['juni'] or args['std'] or args['standard'] or funcParams['jun']	
	local juli = args['jul'] or args['juli'] or args['std'] or args['standard'] or funcParams['jul']
	local august = args['aug'] or args['august'] or args['std'] or args['standard'] or funcParams['aug']
	local september = args['sep'] or args['september'] or args['std'] or args['standard'] or funcParams['sep']	
	local oktober = args['okt'] or args['oktober'] or args['std'] or args['standard'] or funcParams['okt']	
	local november = args['nov'] or args['november'] or args['std'] or args['standard'] or funcParams['nov']
	local dezember = args['dez'] or args['dezember'] or args['std'] or args['standard'] or funcParams['dez']
	
	local ausgabe = funcParams['st']
	local monat = lang:formatDate ( 'm' )
	
	if monat == '01' then ausgabe = januar end
	if monat == '02' then ausgabe = februar end
	if monat == '03' then ausgabe = maerz end
	if monat == '04' then ausgabe = april end
	if monat == '05' then ausgabe = mai end
	if monat == '06' then ausgabe = juni end
	if monat == '07' then ausgabe = juli end
	if monat == '08' then ausgabe = august end
	if monat == '09' then ausgabe = september end
	if monat == '10' then ausgabe = oktober end
	if monat == '11' then ausgabe = november end
	if monat == '12' then ausgabe = dezember end

	return check._testParams ( args, funcParams, 'Zeit' ) .. ausgabe
end

function zeit.inhalt_jahreszeit ( frame )
	
	funcParams = params['inhalt_jahreszeit']
	args = frame:getParent().args
	
	local paramsTypen = { astronomisch = 'astronomisch', meteorologisch = 'meteorologisch' }
	local errorStr = '';
	
	local fruehling = args['fr'] or args['fruehling'] or args['std'] or args['standard'] or funcParams['fr']	
	local sommer = args['so'] or args['sommer'] or args['std'] or args['standard'] or funcParams['so']	
	local herbst = args['he'] or args['herbst'] or args['std'] or args['standard'] or funcParams['he']
	local winter = args['wi'] or args['winter'] or args['std'] or args['standard'] or funcParams['wi']
	
	local typ = args['typ'] or funcParams['typ']
	
	local ausgabe = funcParams['std']
	
	if paramsTypen[typ] == nil then errorStr = check._error ('Falscher Wert für Parameter <em>typ</em>: <em>' .. typ .. '</em>', 'Zeit' ) end
	if typ == 'meteorologisch' then
		local monat = lang:formatDate ( 'm' )
		if monat == '01' then ausgabe = winter end
		if monat == '02' then ausgabe = winter end
		if monat == '03' then ausgabe = fruehling end
		if monat == '04' then ausgabe = fruehling end
		if monat == '05' then ausgabe = fruehling end
		if monat == '06' then ausgabe = sommer end
		if monat == '07' then ausgabe = sommer end
		if monat == '08' then ausgabe = sommer end
		if monat == '09' then ausgabe = herbst end
		if monat == '10' then ausgabe = herbst end
		if monat == '11' then ausgabe = herbst end
		if monat == '12' then ausgabe = winter end		
	end
	if typ == 'astronomisch' then
		local jahr = lang:formatDate ( 'Y' )
		local differenz = os.difftime ( os.time(), os.time ( { year = jahr, month = '01', day = '01' } ) )
		tage = math.floor ( differenz / 86400 +0.5 )
		if tage < 78 then ausgabe = winter
		else
			if tage < 178 then ausgabe = fruehling
			else
				if tage < 265 then ausgabe = sommer
				else
					if tage < 355 then ausgabe = herbst
					else
						ausgabe = winter
					end
				end
			end
		end
		
	end
	return errorStr .. check._testParams ( args, funcParams, 'Zeit' ) .. ausgabe
end

function zeit.inhalt_saison ( frame )
	
	funcParams = params['inhalt_saison']
	args = frame:getParent().args
	
	local sommer = args['so'] or args['sommer'] or args['std'] or args['standard'] or funcParams['so']
	local winter = args['wi'] or args['winter'] or args['std'] or args['standard'] or funcParams['wi']
	
	local ausgabe = funcParams['std']
	
	-- local datum = os.date( '*t' )
	-- if datum['isdst'] then ausgabe = sommer else ausgabe = winter end
	local saison = lang:formatDate ( 'I', nil , true )
	if ( saison == '1' ) then ausgabe = sommer else ausgabe = winter end
	
	return check._testParams ( args, funcParams, 'Zeit' ) .. ausgabe
end

function zeit.inhalt_zeitraum ( frame )
	
	local jahr = lang:formatDate ( 'Y' )
	funcParams = params['inhalt_zeitraum']
	args = frame:getParent().args
	
	local errorStr = '';
	
	local von_tag = args['von_tag'] or funcParams['von_tag']	
	local von_monat = args['von_monat'] or funcParams['von_monat']	
	local bis_monat = args['bis_monat'] or funcParams['bis_monat']
	
	local bis_tag = args['bis_tag']
	if bis_tag == nil then 
		bis_tag = funcParams['bis_tag'] 
		if bis_monat == '02' then 
			bis_tag = 28
			if jahr / 4 == math.floor ( jahr / 4 ) then bis_tag = 29 end
		end
		if bis_monat == '04' then bis_tag = 30 end
		if bis_monat == '06' then bis_tag = 30 end
		if bis_monat == '09' then bis_tag = 30 end
		if bis_monat == '11' then bis_tag = 30 end
	end
	
	local inhalt = args['inhalt']
	if inhalt == nil then
		inhalt = funcParams['inhalt']
		errorStr = check._error ('Kein Textinhalt für den Zeitraum angegeben.', 'Zeit' )
	end

	local standard = args['std'] or args['standard'] or funcParams['std']

	local ausgabe = standard

	local differenz = os.difftime ( os.time(), os.time ( { year = jahr, month = '01', day = '01' } ) )
	local heute = math.floor ( differenz / 86400 +0.5 )
	differenz = os.difftime ( os.time( { year = jahr, month = von_monat, day = von_tag } ), os.time ( { year = jahr, month = '01', day = '01' } ) )
	local von = math.floor ( differenz / 86400 +0.5 )
	differenz = os.difftime ( os.time( { year = jahr, month = bis_monat, day = bis_tag } ), os.time ( { year = jahr, month = '01', day = '01' } ) )
	local bis = math.floor ( differenz / 86400 +0.5 )
	if von > bis then
		if jahr / 4 == math.floor ( jahr / 4 ) then von = von - 357 else von = von - 356 end
	end
	
	local inside = false;
	
	if heute >= von and heute <= bis then inside = true end
	if jahr / 4 == math.floor ( jahr / 4 ) then 
		von = von + 357
		bis = bis + 357
	else 
		von = von + 356
		bis = bis + 356
	end
	if heute >= von and heute <= bis then inside = true end
	
	if inside then ausgabe = inhalt end
	
	return errorStr .. check._testParams ( args, funcParams, 'Zeit' ) .. ausgabe
end

function zeit.addMonth ( frame )
	
	local funcParams = params['addMonth']
	local vArgs = frame.args
	local args = frame:getParent().args

	local anzahl = tonumber( vArgs['anzahlMonate'] or args['anzahlMonate'] or funcParams['anzahlMonate'] )
	local ausgabeFormat = vArgs['format'] or args['format'] or funcParams['format']
	local jahr = tonumber( vArgs['jahr'] or args['jahr'] or lang:formatDate ( 'Y' ) )
	local monat = tonumber( vArgs['monat'] or args['monat'] or lang:formatDate ( 'm' ) )
	local tag = vArgs['tag'] or args['tag'] or lang:formatDate ( 'd' )
	
	local monatStr = tostring ( monat + anzahl - ( math.floor ( ( anzahl + monat - 1 ) / 12 ) * 12 ) )
	if ( string.len(monatStr) == 1 ) then monatStr = '0'..monatStr end
	
	if monatStr == '02' and tag == '31' then tag = '28'
	elseif monatStr == '02' and tag == '30' then tag = '28'
	elseif monatStr == '02' and tag == '29' then tag = '28'
	elseif monatStr == '04' and tag == '31' then tag = '30'
	elseif monatStr == '06' and tag == '31' then tag = '30'
	elseif monatStr == '09' and tag == '31' then tag = '30'
	elseif monatStr == '11' and tag == '31' then tag = '30'
	end

	return lang:formatDate ( ausgabeFormat, tostring ( jahr + math.floor ( ( anzahl + monat - 1 ) / 12 ) )..monatStr..tag )
end

function zeit.addYear ( frame )
	
	local funcParams = params['addYear']
	local vArgs = frame.args
	local args = frame:getParent().args

	local anzahl = tonumber( vArgs['anzahlJahre'] or args['anzahlJahre'] or funcParams['anzahlJahre'] )
	local ausgabeFormat = vArgs['format'] or args['format'] or funcParams['format']
	local jahr = tonumber( vArgs['jahr'] or args['jahr'] or lang:formatDate ( 'Y' ) )
	local monat = vArgs['monat'] or args['monat'] or lang:formatDate ( 'm' )
	local tag = vArgs['tag'] or args['tag'] or lang:formatDate ( 'd' )

	return lang:formatDate ( ausgabeFormat, tostring ( jahr + anzahl )..monat..tag )
end

return zeit