Vorlage:NaechstesPiratentreffen

Aus Piratenwiki
Wechseln zu: Navigation, Suche

Diese Vorlage generiert automatisch einen Timestamp anhand der Vorgaben Wochentag, intervall und Uhrzeit.
Die Ausgabe erfolgt im Format YYYYMMDDhhmmss, bspw. 20240730232228 für jetzt(bzw. vor zwei stunden, da das wiki eine andere Lokalzeit hat).


Wie benutze ich diese Vorlage

Erstellt eine eigene Vorlage für eurer Piratentreffen, die folgendes enthält:

{{Vorlage:NaechstesPiratentreffen
| Wochentag = Mo
| Intervall = 1
| Uhrzeit = 19:45
}}

Diese Vorlage erzeugt beim Aufruf einen Timestamp entsprechend dem gewünschten Intervall. Hier der Schlüssel für die Intervalle (einfach die gewünschte Zahl verwenden):

1 : jede Woche
2 : jeden 1. und 3.
3 : jeden 2. und 4.
4 : jeden 1.
5 : jeden 2.
6 : jeden 3.
7 : jeden 4.
8 : jede gerade Woche (nach ISO 8601 mit Montag beginnend)
9 : jede ungerade Woche (nach ISO 8601 mit Montag beginnend)
10: jeden 1., 3. und 5.
11: jeden Letzten des Monats

Diesen Timestamp könnt ihr dann auf eurer Seite mit der funktion

{{#time: ZEITFORMAT | TIMESTAMP}}

in ein lesbares Datum umwandeln.

ZEITFORMAT entsprich dabei einem Formatierungsstring, mehr Infos zur Formatierung gibt es hier
Ein Beispiel wäre:

{{#time: l, \d\e\n d.m.Y \u\m H:i \U\h\r | 20100515184500 }}

Das Resultat wäre:

Samstag, den 15.05.2010 um 18:45 Uhr

Anstelle von TIMESTAMP könnt ihr entweder manuell einen Timestamp eintragen, wie im Beispiel, oder für regelmäßige Termine gebt ihr hier eure oben erstellte Vorlage an.

ToDo

  1. Kommentieren ^^
  2. Algorithmus zur bestimmung der Wochenzahlen (schon von haus aus implementiert {{#time: W | TIMESTAMP}}
    1. Intervall für jede gerade/jede ungerade woche

Quellcode

{{#vardefine: currentTime | 
	{{CURRENTTIMESTAMP}}
}} 

{{#vardefine: weekday |
	{{{Wochentag}}}
}}

{{#vardefine: interval |
	{{{Intervall}}}
}}

{{#vardefine: time |
	{{#pad: {{#pad: {{#sub: {{{Uhrzeit}}} | 0 | 2 }} | 4 | {{#sub: {{{Uhrzeit}}} | 3 | 2 }} | right }} | 6 | 0 | right }}
}}

{{#vardefine: currentYear |
	{{#sub: {{#var:currentTime}} | 0 | 4 }}
}}

{{#vardefine: currentMonth |
	{{#sub: {{#var:currentTime}} | 4 | 2 }}
}}

{{#vardefine: isLeapyear | 
	{{#ifexpr: ({{#var: currentYear}} mod 400) = 0 | 1 |
		{{#ifexpr: ({{#var: currentYear}} mod 100) = 0 | 0 |
			{{#ifexpr: ({{#var: currentYear}} mod 4) = 0 | 1 | 0 }}
		}}
	}}
}}

{{#vardefine: daysOfMonth |
	{{#switch: {{#var: currentMonth}}
		|01 = 31
		|02 = {{#ifeq: {{#var: isLeapyear}} | 1 | 29 | 28 }}
		|03 = 31
		|04 = 30
		|05 = 31
		|06 = 30
		|07 = 31
		|08 = 31
		|09 = 30
		|10 = 31
		|11 = 30
		|12 = 31
	}}
}}

{{#vardefine: firstDayOfCurrentMonth |
	{{#time: D |
		{{#pad: {{#var: currentYear}} | 14 | 
			{{#pad: {{#var: currentMonth}} | 10 | 01000000 | right}} | 
			right
		}}
    }}
}}

{{#vardefine: firstDesiredWeekday |
	{{#switch: {{#var: weekday}}
		|Mo = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 1
					|Di = 7
					|Mi = 6
					|Do = 5
					|Fr = 4
					|Sa = 3
					|So = 2
				}}
		|Di = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 2
					|Di = 1
					|Mi = 7
					|Do = 6
					|Fr = 5
					|Sa = 4
					|So = 3
				}}
		|Mi = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 3
					|Di = 2
					|Mi = 1
					|Do = 7
					|Fr = 6
					|Sa = 5
					|So = 4
				}}
		|Do = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 4
					|Di = 3
					|Mi = 2
					|Do = 1
					|Fr = 7
					|Sa = 6
					|So = 5
				}}
		|Fr = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 5
					|Di = 4
					|Mi = 3
					|Do = 2
					|Fr = 1
					|Sa = 7
					|So = 6
				}}
		|Sa = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 6
					|Di = 5
					|Mi = 4
					|Do = 3
					|Fr = 2
					|Sa = 1
					|So = 7
				}}
		|So = 	{{#switch: {{#var: firstDayOfCurrentMonth}}
					|Mo = 7
					|Di = 6
					|Mi = 5
					|Do = 4
					|Fr = 3
					|Sa = 2
					|So = 1
				}}
	}}
}}

{{#vardefine: nextDatesYear |
	{{#ifexpr: ({{#var: currentMonth}} + 1) > 12 |
		{{#expr ({{#var: currentYear}} + 1 )}} |
		{{#var: currentYear}}
	}}
}}

{{#vardefine: nextMonth |
	{{#ifexpr: ({{#var: currentMonth}} + 1) > 12 |
		01 |
		{{#ifexpr: {{#var: currentMonth}} + 1 > 9 |
			{{#expr: {{#var: currentMonth}} + 1 }} |
			{{#pad: {{#expr: {{#var: currentMonth}} + 1 }} | 2 | 0 | left }}
		}}
	}}
}}

{{#vardefine: firstDayOfNextMonth |
	{{#time: D |
		{{#pad: {{#var: nextDatesYear}} | 14 | 
			{{#pad: {{#var: nextMonth}} | 10 | 01000000 | right}} | 
			right
		}}
    }}
}}

{{#vardefine: daysOfNextMonth |
	{{#switch: {{#var: nextMonth}}
		|01 = 31
		|02 = {{#ifeq: {{#var: isLeapyear}} | 1 | 29 | 28 }}
		|03 = 31
		|04 = 30
		|05 = 31
		|06 = 30
		|07 = 31
		|08 = 31
		|09 = 30
		|10 = 31
		|11 = 30
		|12 = 31
	}}
}}

{{#vardefine: firstDesiredWeekdayNextMonth |
	{{#switch: {{#var: weekday}}
		|Mo = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 1
					|Di = 7
					|Mi = 6
					|Do = 5
					|Fr = 4
					|Sa = 3
					|So = 2
				}}
		|Di = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 2
					|Di = 1
					|Mi = 7
					|Do = 6
					|Fr = 5
					|Sa = 4
					|So = 3
				}}
		|Mi = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 3
					|Di = 2
					|Mi = 1
					|Do = 7
					|Fr = 6
					|Sa = 5
					|So = 4
				}}
		|Do = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 4
					|Di = 3
					|Mi = 2
					|Do = 1
					|Fr = 7
					|Sa = 6
					|So = 5
				}}
		|Fr = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 5
					|Di = 4
					|Mi = 3
					|Do = 2
					|Fr = 1
					|Sa = 7
					|So = 6
				}}
		|Sa = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 6
					|Di = 5
					|Mi = 4
					|Do = 3
					|Fr = 2
					|Sa = 1
					|So = 7
				}}
		|So = 	{{#switch: {{#var: firstDayOfNextMonth}}
					|Mo = 7
					|Di = 6
					|Mi = 5
					|Do = 4
					|Fr = 3
					|Sa = 2
					|So = 1
				}}
	}}
}}

{{#vardefine: firstDate
	|{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: currentYear}} 
				| 6
				| {{#var: currentMonth}} 
				| right 
			}} 
			| 8
			| {{#pad: {{#var: firstDesiredWeekday}} | 2 | 0 | left }} 
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}}
}}

{{#vardefine: secondDate |
	{{#ifexpr: ({{#var: firstDesiredWeekday}} + 7) > 9 
		|{{#pad: 
			{{#pad: 
				{{#pad: 
					{{#var: currentYear}} 
					| 6 
					| {{#var: currentMonth}} 
					| right 
				}} 
				| 8
				| {{#expr: {{#var: firstDesiredWeekday}} + 7}}
				| right 
			}} 
			| 14
			| {{#var: time}}
			| right 
		}} 
		|{{#pad: 
			{{#pad: 
				{{#pad: 
					{{#var: currentYear}} 
					| 6 
					| {{#var: currentMonth}} 
					| right 
				}} 
				| 8
				| {{#pad: {{#expr: {{#var: firstDesiredWeekday}} + 7}} | 2 | 0 | left }}
				| right 
			}} 
			| 14
			| {{#var: time}}
			| right 
		}} 
	}}
}}

{{#vardefine: thirdDate |
	{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: currentYear}} 
				| 6 
				| {{#var: currentMonth}} 
				| right 
			}} 
			| 8
			| {{#expr: {{#var: firstDesiredWeekday}} + 14}}
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}} 
}}

{{#vardefine: fourthDate |
	{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: currentYear}} 
				| 6 
				| {{#var: currentMonth}} 
				| right 
			}} 
			| 8
			| {{#expr: {{#var: firstDesiredWeekday}} + 21}}
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}} 
}}

{{#vardefine: fifthDate |
	{{#ifexpr: ({{#var: firstDesiredWeekday}} + 28) <= {{#var: daysOfMonth}} 
		|{{#pad: 
			{{#pad: 
				{{#pad: 
					{{#var: currentYear}} 
					| 6 
					| {{#var: currentMonth}} 
					| right 
				}} 
				| 8
				| {{#expr: {{#var: firstDesiredWeekday}} + 28}}
				| right 
			}} 
			| 14
			| {{#var: time}}
			| right 
		}}
		|{{#pad: 
			{{#pad: 
				{{#pad: 
					{{#var: nextDatesYear}} 
					| 6 
					| {{#var: nextMonth}} 
					| right 
				}} 
				| 8
				| {{#pad: {{#var: firstDesiredWeekdayNextMonth}} | 2 | 0 | left }}
				| right 
			}} 
			| 14
			| {{#var: time}}
			| right 
		}} 
	}}
}}

{{#vardefine: firstDateNextMonth |
	{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: nextDatesYear}} 
				| 6 
				| {{#var: nextMonth}} 
				| right 
			}} 
			| 8
			| {{#pad: {{#var: firstDesiredWeekdayNextMonth}} | 2 | 0 | left }}
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}} 
}}

{{#vardefine: secondDateNextMonth |
	{{#ifexpr: ({{#var: firstDesiredWeekdayNextMonth}} + 7) > 9 
		|{{#pad: 
			{{#pad: 
				{{#pad: 
					{{#var: nextDatesYear}} 
					| 6 
					| {{#var: nextMonth}} 
					| right 
				}} 
				| 8
				| {{#expr: {{#var: firstDesiredWeekdayNextMonth}} + 7}}
				| right 
			}} 
			| 14
			| {{#var: time}}
			| right 
		}} 
		|{{#pad: 
			{{#pad: 
				{{#pad: 
					{{#var: nextDatesYear}} 
					| 6 
					| {{#var: nextMonth}} 
					| right 
				}} 
				| 8
				| {{#pad: {{#expr: {{#var: firstDesiredWeekdayNextMonth}} + 7}} | 2 | 0 | left }}
				| right 
				}} 
			| 14
			| {{#var: time}}
			| right 
		}} 
	}}
}}

{{#vardefine: thirdDateNextMonth |
	{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: nextDatesYear}} 
				| 6 
				| {{#var: nextMonth}} 
				| right 
			}} 
			| 8
			| {{#expr: {{#var: firstDesiredWeekdayNextMonth}} + 14}}
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}}
}}

{{#vardefine: fourthDateNextMonth |
	{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: nextDatesYear}} 
				| 6 
				| {{#var: nextMonth}} 
				| right 
			}} 
			| 8
			| {{#expr: {{#var: firstDesiredWeekdayNextMonth}} + 21}}
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}}
}}

{{#vardefine: fifthDateNextMonth |
	{{#pad: 
		{{#pad: 
			{{#pad: 
				{{#var: nextDatesYear}} 
				| 6 
				| {{#var: nextMonth}} 
				| right 
			}} 
			| 8
			| {{#expr: {{#var: firstDesiredWeekdayNextMonth}} + 28}}
			| right 
		}} 
		| 14
		| {{#var: time}}
		| right 
	}}
}}

{{#vardefine: lastDate |
	{{#ifeq: {{#var: currentMonth}} |
		{{#sub: {{#var: fifthDate}} |
		4 |
		2}} |
		{{#var: fifthDate}} |
		{{#var: fourthDate}}
	}}
}}

{{#vardefine: lastDateNextMonth |
	{{#ifexpr: ({{#var: daysOfNextMonth}} - {{#sub:
		{{#var: fifthDateNextMonth}} |
		4 |
		2}}) < 0 |
		{{#var: fourthDateNextMonth}} |
		{{#var: fifthDateNextMonth}}
	}}
}}

{{#vardefine: result |
	{{#switch: {{#var: interval}}
		| 1 =	{{#ifexpr: ({{#var: firstDate}} - {{#var:currentTime}}) > 0 |
					{{#var: firstDate}} |
					{{#ifexpr: ({{#var: secondDate}} - {{#var:currentTime}}) > 0 |
						{{#var: secondDate}} |
						{{#ifexpr: ({{#var: thirdDate}} - {{#var:currentTime}}) > 0 |
							{{#var: thirdDate}} |
							{{#ifexpr: ({{#var: fourthDate}} - {{#var:currentTime}}) > 0 |
								{{#var: fourthDate}} |
								{{#ifexpr: ({{#var: fifthDate}} - {{#var:currentTime}}) > 0 |
									{{#var: fifthDate}} |
									{{#var: firstDateNextMonth}}
								}}
							}}
						}}
					}}
				}}
		| 2 = 	{{#ifexpr: ({{#var: firstDate}} - {{#var:currentTime}}) > 0 |
					{{#var: firstDate}} |
					{{#ifexpr: ({{#var: thirdDate}} - {{#var:currentTime}}) > 0 |
						{{#var: thirdDate}} |
						{{#var: firstDateNextMonth}}
					}}
				}}
		| 3 = 	{{#ifexpr: ({{#var: secondDate}} - {{#var:currentTime}}) > 0 |
					{{#var: secondDate}} |
					{{#ifexpr: ({{#var: fourthDate}} - {{#var:currentTime}}) > 0 |
						{{#var: fourthDate}} |
						{{#var: secondDateNextMonth}}
					}}
				}}
		| 4 =	{{#ifexpr: ({{#var: firstDate}} - {{#var:currentTime}}) > 0 |
					{{#var: firstDate}} |
					{{#var: firstDateNextMonth}}
				}}
		| 5 =	{{#ifexpr: ({{#var: secondDate}} - {{#var:currentTime}}) > 0 |
					{{#var: secondDate}} |
					{{#var: secondDateNextMonth}}
				}}
		| 6 =	{{#ifexpr: ({{#var: thirdDate}} - {{#var:currentTime}}) > 0 |
					{{#var: thirdDate}} |
					{{#var: thirdDateNextMonth}}
				}}
		| 7 =	{{#ifexpr: ({{#var: fourthDate}} - {{#var:currentTime}}) > 0 |
					{{#var: fourthDate}} |
					{{#var: fourthDateNextMonth}}
				}}
		| 8	=	{{#ifexpr: {{#time: W | {{#var: firstDate}} }} mod 2 = 0 |
					{{#ifexpr: ({{#var: firstDate}} - {{#var:currentTime}}) > 0 |
						{{#var: firstDate}} |
						{{#ifexpr: ({{#var: thirdDate}} - {{#var:currentTime}}) > 0 |
							{{#var: thirdDate}} |
							{{#ifexpr: ({{#var: fifthDate}} - {{#var:currentTime}}) > 0 |
								{{#var: fifthDate}} |
								{{#var: firstDateNextMonth}}
							}}
						}}
					}} |
					{{#ifexpr: ({{#var: secondDate}} - {{#var:currentTime}}) > 0 |
						{{#var: secondDate}} |
						{{#ifexpr: ({{#var: fourthDate}} - {{#var:currentTime}}) > 0 |
							{{#var: fourthDate}} |
							{{#ifexpr: {{#time: W | {{#var: firstDateNextMonth}} }} mod 2 = 0 |
								{{#var: firstDateNextMonth}} |
								{{#var: secondDateNextMonth}}
							}}
						}}
					}}
				}}
		| 9	=	{{#ifexpr: {{#time: W | {{#var: firstDate}} }} mod 2 != 0 |
					{{#ifexpr: ({{#var: firstDate}} - {{#var:currentTime}}) > 0 |
						{{#var: firstDate}} |
						{{#ifexpr: ({{#var: thirdDate}} - {{#var:currentTime}}) > 0 |
							{{#var: thirdDate}} |
							{{#ifexpr: ({{#var: fifthDate}} - {{#var:currentTime}}) > 0 |
								{{#var: fifthDate}} |
								{{#var: firstDateNextMonth}}
							}}
						}}
					}} |
					{{#ifexpr: ({{#var: secondDate}} - {{#var:currentTime}}) > 0 |
						{{#var: secondDate}} |
						{{#ifexpr: ({{#var: fourthDate}} - {{#var:currentTime}}) > 0 |
							{{#var: fourthDate}} |
							{{#ifexpr: {{#time: W | {{#var: firstDateNextMonth}} }} mod 2 != 0 |
								{{#var: firstDateNextMonth}} |
								{{#var: secondDateNextMonth}}
							}}
						}}
					}}
				}}
		| 10 = 	{{#ifexpr: ({{#var: firstDate}} - {{#var:currentTime}}) > 0 |
					{{#var: firstDate}} |
					{{#ifexpr: ({{#var: thirdDate}} - {{#var:currentTime}}) > 0 |
						{{#var: thirdDate}} |
						{{#ifexpr: ({{#var: fifthDate}} - {{#var:currentTime}}) > 0 |
							{{#var: fifthDate}} |
							{{#var: firstDateNextMonth}}
					}}
					}}
				}}
		| 11 = 	{{#ifexpr: ({{#var: lastDate}} - {{#var:currentTime}}) > 0 |
					{{#var: lastDate}} |
					{{#var: lastDateNextMonth}}
					}}
	}}
}}

{{#var: result}}