Berechnungen mit dem Datum ❶ ❷ ❸
Feiertage, Wochentag, Sonnenauf.- und Sonnenuntergang, Mondphase, Kalenderwoche, Sternzeichen, Namenstage, Schaltjahr, Jahreszeit, …
Die folgenden (41) Funktionen besitzen keinen Status der absoluten Korrektheit, ich habe mich aber bemüht ansatzweise richtige Ergebnisse zu erzeugen. Wer möchte, kann die Funktionen für eigene Zwecke verwenden oder weiterentwickeln.
- Datumsberechnung
- Twilight Zone
- Namenstage
- Weltzeit
- Geburtstage in den nächsten Tagen
- Ausgabe bis zu einem bestimmten Datum
- Feiertage
- Mondphase
- Sternzeichen
- Sonnenaufgang und Sonnenuntergang
- "Gestern", "Heute", "Morgen"
- Wochentag
- Arbeitstage
- Quartal
- Kalenderwoche
- Kalenderwoche von Montag bis Sonntag
- Sommerzeit
- Schaltjahr
- Julianisches Datum
- Öffnungszeiten
Datumsberechnung
Twilight Zone
Sunset: 19:19
"Civilian Twilight" start: 04:42
"Civilian Twilight" end: 19:54
"Nautical Twilight" start: 03:59
"Nautical Twilight" end: 20:37
"Astronomical Twilight" start: 03:11
"Astronomical Twilight" end: 21:26
Namenstage
Weltzeit
Geburtstage in den nächsten Tagen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
// Geburtstage in den nächsten Tagen
$tage = 14;
// Name|Monat|Tag
// Zahlen immer zweistellig angeben!
$geburtstage = [
'Mike|07|01|',
'Sabrina|09|01|',
'Karlo|27|08|',
'Petra|18|09|',
'Ronald|04|12|',
'Tom|12|01|',
];
$ausgabe = "";
for ($i = 0; $i != $tage; $i++) {
$aktuell = date("d.m.Y", strtotime("+" . $i . " day", time()));
list($tag, $monat, $jahr) = explode(".", $aktuell);
foreach ($geburtstage as $geburtstag) {
list($name, $tag2, $monat2, $jahr2) = explode("|", $geburtstag);
if ($tag2 == $tag && $monat2 == $monat) {
$ausgabe .= '<b>' . $name . '</b><br>' . datum($tag, $monat, $jahr) . '<br><br>';
}
}
}
if ($ausgabe != "") {
echo '<p>Geburtstage in den nächsten ' . $tage . ' Tagen: ' . '<br><br>' . $ausgabe . '</p>';
}
else {
echo '<p>In den nächsten ' . $tage . ' Tagen<br>hat niemand Geburtstag!</p>';
}
function datum($tag, $monat, $jahr) {
$wt = getdate(mktime(0, 0, 0, $monat, $tag, $jahr));
$tag = round($tag);
$monat = round($monat);
$tage = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$monate = array(1=>"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
return $tage[$wt["wday"]] . ", " . $tag . " " . $monate[$monat] . " " . $jahr;
}
?>
Ausgabe bis zu einem bestimmten Datum
1
2
3
4
5
6
7
<?php
// Ausgabe bis zu einem bestimmten Datum
if ("06.08.2026" <= date("d.m.Y")) {
echo "Hallo Welt!";
}
?>
Tipp: Der Zeitgenerator erstellt einen PHP-Quelltext, der an einem selbst bestimmten Tag, einen eingegebenen Text, Bild oder Link anzeigt.
Feiertage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
// Feiertag
function feiertag($tag, $monat, $jahr) {
$ausgabe = "";
foreach (feiertage($jahr) as $ftag => $zeitstempel) {
if ($zeitstempel == date("U", mktime(0, 0, 0, $monat, $tag, $jahr))) {
$ausgabe .= $ftag . '<br>';
}
}
return $ausgabe;
}
// Feiertage (gesetzliche- kirchliche- und Brauchtumstage)
function feiertage($jahr) {
// Die festen Feiertage
$ftag["Neujahr"] = mktime(0, 0, 0, 1, 1, $jahr);
$ftag["Heilige 3 Könige"] = mktime(0, 0, 0, 1, 6, $jahr);
$ftag["Valentinstag"] = mktime(0, 0, 0, 2, 14, $jahr);
$ftag["Walpurgisnacht"] = mktime(0, 0, 0, 4, 30, $jahr);
$ftag["Tag der Arbeit"] = mktime(0, 0, 0, 5, 1, $jahr);
$ftag["Sommersonnenwende"] = mktime(0, 0, 0, 6, 21, $jahr);
$ftag["Maria Himmelfahrt"] = mktime(0, 0, 0, 8, 15, $jahr);
$ftag["Tag der deutschen Einheit"] = mktime(0, 0, 0, 10, 3, $jahr);
$ftag["Erntedankfest"] = strtotime("Sunday October " . $jahr);
$ftag["Kirchweih"] = strtotime("third Sunday October " . $jahr); // Allerweltskirchweih!
$ftag["Reformationstag"] = mktime(0, 0, 0, 10, 31, $jahr);
$ftag["Halloween"] = mktime(0, 0, 0, 10, 31, $jahr);
$ftag["Allerheiligen"] = mktime(0, 0, 0, 11, 1, $jahr);
$ftag["Martinstag"] = mktime(0, 0, 0, 11, 11, $jahr);
$ftag["Nikolaus"] = mktime(0, 0, 0, 12, 6, $jahr);
$ftag["Wintersonnenwende"] = mktime(0, 0, 0, 12, 22, $jahr);
$ftag["Heiligabend"] = mktime(0, 0, 0, 12, 24, $jahr);
$ftag["1. Weihnachtsfeiertag"] = mktime(0, 0, 0, 12, 25, $jahr);
$ftag["2. Weihnachtsfeiertag"] = mktime(0, 0, 0, 12, 26, $jahr);
$ftag["Silvester"] = mktime(0, 0, 0, 12, 31, $jahr);
// Hier weitere Feiertage (Geburtstage etc.) eintragen
// Zeitumstellung
$ftag["Sommerzeit! "] = strtotime('-1 week sun april' . $jahr);
$ftag["Normalzeit! "] = strtotime('-1 week sun november' . $jahr);
// Muttertag berechnen
$ftag["Muttertag"] = mktime(0, 0, 0, 5, (14 - date("w", mktime(0, 0, 0, 5, 0, $jahr))), $jahr);
// Ostersonntag berechnen
$ostern = strtotime("+ " . (easter_days($jahr)) . " days", mktime(0, 0, 0, 3, 21, $jahr));
// Die beweglichen Feiertage, abhängig vom Ostersonntag
$ftag["Rosenmontag"] = strtotime("-48 day", $ostern);
$ftag["Faschingsdienstag (Fastnacht)"] = strtotime("-47 day", $ostern);
$ftag["Aschermittwoch"] = strtotime("-46 day", $ostern);
$ftag["Palmsonntag"] = strtotime("-7 day", $ostern);
$ftag["Karfreitag"] = strtotime("-2 day", $ostern);
$ftag["Ostersonntag"] = strtotime("0 day", $ostern);
$ftag["Ostermontag"] = strtotime("+1 day", $ostern);
$ftag["Weißer Sonntag"] = strtotime("+7 day", $ostern);
$ftag["Ch. Himmelfahrt, Vatertag"] = strtotime("+39 day", $ostern);
$ftag["Pfingstsonntag"] = strtotime("+49 day", $ostern);
$ftag["Pfingstmontag"] = strtotime("+50 day", $ostern);
$ftag["Fronleichnam"] = strtotime("+60 day", $ostern);
// Erster Advent berechnen
$advent = strtotime("+1 sunday",mktime(0,0,0,11,27,$jahr));
// Die beweglichen Feiertage, abhängig vom ersten Advent
$ftag["1. Advent "] = strtotime("+0 day", $advent);
$ftag["2. Advent "] = strtotime("+7 day", $advent);
$ftag["3. Advent "] = strtotime("+14 day", $advent);
$ftag["4. Advent "] = strtotime("+21 day", $advent);
$ftag["Buß- und Bettag "] = strtotime("-11 day", $advent);
$ftag["Totensonntag "] = strtotime("last sunday", $advent);
$ftag["Volkstrauertag "] = strtotime("-14 day", $advent);
asort($ftag);
return $ftag;
}
?>
Beispiel:
<?php echo feiertag(24, 12, 2019); // Tag, Monat, Jahr ?>
Ausgabe:
Heiligabend
Mondphase
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// Mondphase berechnen (Umwandlung eines ehemaligen Visual-Basic Scripts)
function mondphase($tag, $monat, $jahr) {
$phase = array("Vollmond", "Abnehmender Dreiviertelmond", "Letztes Viertel", "Abnehmender Halbmond", "Neumond", "Zunehmender Neumond", "Erstes Viertel", "Zunehmender Dreiviertelmond");
$tag = $tag + 2;
// Wichtige Werte berechnen
$jahr = $jahr - intval((12 - $monat) / 10);
$monat = $monat + 9;
if ($monat >= 12) {
$monat = $monat - 12;
}
$k1 = intval(365.25 * ($jahr + 4712));
$k2 = intval(30.6 * $monat + .5);
// $julian = Julianisches Datum um 12h UT am gewünschten Tag
$julian = $k1 + $k2 + $tag + 59;
// Synodische Phase berechnen
$ynodische_phase = ($julian - 2451550.1) / 29.530588853;
$ynodische_phase = $ynodische_phase - intval($ynodische_phase);
if ($ynodische_phase < 0) {
$ynodische_phase = $ynodische_phase + 1;
}
// Mondalter in Tagen
$mondalter = intval($ynodische_phase * 29.53);
if ($mondalter == 0 || $mondalter == 29) {$aktuellephase = 0;}
else if ($mondalter >= 1 && $mondalter <= 6) {$aktuellephase = 1;}
else if ($mondalter == 7) {$aktuellephase = 2;}
else if ($mondalter >= 8 && $mondalter <= 13) {$aktuellephase = 3;}
else if ($mondalter == 14) {$aktuellephase = 4;}
else if ($mondalter >= 15 && $mondalter <= 21) {$aktuellephase = 5;}
else if ($mondalter == 22) {$aktuellephase = 6;}
else if ($mondalter >= 23 && $mondalter <= 28) {$aktuellephase = 7;}
else {$aktuellephase = 4;}
return array($phase[$aktuellephase], $mondalter);
}
?>
Beispiel:
<?php $mond = mondphase(08, 24, 2019); // Monat, Tag, Jahr echo 'Phase: ' . $mond[0] . ' - Mondalter: ' . $mond[1] . ' Tage'; ?>
Ausgabe:
Phase: Erstes Viertel - Mondalter: 22 Tage
Sternzeichen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// Sternzeichen
function sternzeichen($tag, $monat, $jahr) {
$st = date("d", mktime(0, 0, 0, $monat, $tag, $jahr));
$sm = date("n", mktime(0, 0, 0, $monat, $tag, $jahr));
if ($st > 20 && $sm == 3 || $st < 21 && $sm == 4) {$sn = 'WIDDER - Aries, 21.3 - 20.4';}
if ($st > 20 && $sm == 4 || $st < 21 && $sm == 5) {$sn = 'STIER - Taurus, 21.4 - 20.5';}
if ($st > 20 && $sm == 5 || $st < 22 && $sm == 6) {$sn = 'ZWILINGE - Gemini, 21.5 - 21.6';}
if ($st > 21 && $sm == 6 || $st < 23 && $sm == 7) {$sn = 'KREBS - Cancer, 22.6 - 22.7';}
if ($st > 22 && $sm == 7 || $st < 24 && $sm == 8) {$sn = 'LÖWE - Leo, 23.7 - 23.8';}
if ($st > 23 && $sm == 8 || $st < 24 && $sm == 9) {$sn = 'JUNGFRAU - Virgo, 24.8 - 23.9';}
if ($st > 23 && $sm == 9 || $st < 24 && $sm == 10) {$sn = 'WAAGE - Libra - 24.9 - 23.10';}
if ($st > 23 && $sm == 10 || $st < 23 && $sm == 11) {$sn = 'SKORPION - Scorpio, 24.10 - 22.11';}
if ($st > 22 && $sm == 11 || $st < 22 && $sm == 12) {$sn = 'SCHÜTZE - Sagittarius 23.11 - 21.12';}
if ($st > 21 && $sm == 12 || $st < 21 && $sm == 1) {$sn = 'STEINBOCK - Capricornus, 22.12 - 20.1';}
if ($st > 20 && $sm == 1 || $st < 20 && $sm == 2) {$sn = 'WASSERMANN - Aquarius, 21.1 - 19.2';}
if ($st > 19 && $sm == 2 || $st < 21 && $sm == 3) {$sn = 'FISCHE - Pisces, 20.2 - 20.3';}
return $sn;
}
?>
Beispiel:
<?php echo sternzeichen(12, 6, 2013); // Tag, Monat, Jahr ?>
Ausgabe:
ZWILINGE - Gemini, 21.5 - 21.6
Sonnenaufgang und Sonnenuntergang
Die Berechnung des Sonnenauf.- und Sonnenuntergangs sind PHP(5) eigene Funktionen date_sunrise(),date_sunset().
Die geografische Länge und Breite des Standorts können Sie z.B. mit dem Programm "Google Earth" ermitteln.
geo. Breite (48.25 - bei "Google Earth" steht z. B.: 48°25'…)
geo. Länge (11.57 - bei "Google Earth" steht z. B.: 11°57'…)
Zenit ~= 90° (Differenzanpassung (+/- Grad) z.B. in den Bergen oder auf Hochhäusern notwendig).
1
2
3
4
5
6
7
8
9
10
<?php
// Sonnenauf.- und Sonnenuntergang
function sunrise($tag, $monat, $jahr, $GEO_BREITE, $GEO_LAENGE) {
$onnenaufgang = date_sunrise(mktime(0, 0, 0, $monat, $tag, $jahr), SUNFUNCS_RET_STRING, $GEO_BREITE, $GEO_LAENGE, 90, date("O") / 100);
$onnenuntergang = date_sunset(mktime(0, 0, 0, $monat, $tag, $jahr), SUNFUNCS_RET_STRING, $GEO_BREITE, $GEO_LAENGE, 90, date("O") / 100);
return '☼▲ Sonnenaufgang: ' . $onnenaufgang . ' Uhr<br>' .
'☼▼ Sonnenuntergang: ' . $onnenuntergang . ' Uhr <br >' .
'☼◔ Sonnenscheindauer: ' . (round(str_replace(":", ".", $onnenuntergang) - str_replace(":", ".", $onnenaufgang), 2)) . ' Stunden';
}
?>
Beispiel:
<?php echo sunrise(24, 08, 2019, "49.95", "10.95"); ?>
Ausgabe:
☼▲ Sonnenaufgang: 06:22 Uhr☼▼ Sonnenuntergang: 20:14 Uhr
☼◔ Sonnenscheindauer: 13.92 Stunden
"Gestern", "Heute", "Morgen"
Siehe auch: Datum und Uhrzeit formatiert ausgeben
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
// Gestern, Heute, Morgen
function gestern_heute_morgen($tag, $monat, $jahr) {
$datum = mktime(0, 0, 0, date($monat), date($tag), date($jahr));
if ($datum == mktime(0, 0, 0, date("m"), date("d"), date("Y"))) {
return " Heute";
}
elseif ($datum == mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) {
return " Gestern";
}
elseif ($datum == mktime(0, 0, 0, date("m"), date("d") - 2, date("Y"))) {
return " Vorgestern";
}
elseif ($datum == mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"))) {
return " Morgen";
}
elseif ($datum == mktime(0, 0, 0, date("m"), date("d") + 2, date("Y"))) {
return " Übermorgen";
}
elseif ($datum >= mktime(0, 0, 0, date("m"), date("d") + 3, date("Y"))) {
return " In " . intval(($datum - mktime(0, 0, 0, date("m"), date("d"), date("Y"))) / (3600 * 24)) . " Tagen";
}
elseif ($datum <= mktime(0, 0, 0, date("m"), date("d") - 3, date("Y"))) {
return str_replace("-", "", " Vor " . intval(($datum - mktime(0, 0, 0, date("m"), date("d"), date("Y"))) / (3600 * 24)) . " Tagen");
}
}
?>
Beispiel:
<?php echo gestern_heute_morgen(22, 7, 2018); ?>
Ausgabe:
Vor 398 Tagen
Wochentag
1
2
3
4
5
6
7
8
<?php
// Wochentag
function wochentag3($tag, $monat, $jahr) {
$tage = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$wt = getdate(mktime(0, 0, 0, $monat, $tag, $jahr));
return $tage[$wt["wday"]];
}
?>
Ausgabe für den 24.8.2019:
Samstag
Arbeitstage
1
2
3
4
5
6
7
8
9
10
11
<?php
// Arbeitstage
function arbeitstage($jahr, $monat, $anzahl = 0) {
for($i = 1; $i <= date("t", mktime(0, 0, 0, $monat, 1, $jahr)); $i++) {
if (date("w", mktime(0, 0, 0, $monat, $i, $jahr)) != 0 && date("w", mktime(0, 0, 0, $monat, $i, $jahr)) != 6) {
$anzahl++;
}
}
return $anzahl;
}
?>
Quartal
1
2
3
4
5
6
<?php
// Quartal
function quartal($monat) {
return (int)(($monat - 1) / 3) + 1;
}
?>
Ausgabe für den Monat 8:
3
Kalenderwoche
Dieses Script zeigt für gewöhnlich die richtige Kalenderwoche an, nur in der letzten Woche des Jahres beziehungsweise
ersten Woche des nächsten Jahres stimmt diese nicht.
1
2
3
4
5
6
7
<?php
// Kalenderwoche
function kalenderwoche($tag, $monat, $jahr) {
$zl = mktime(0, 0, 0, $monat, $tag, $jahr);
return sprintf("%d", date("W", $zl), date("j.n.Y", strtotime("last Sunday", $zl)), date("j.n.Y", strtotime("+6 day", $zl)));
}
?>
Ausgabe für den 24.8.2019:
34
Kalenderwoche von Montag bis Sonntag
1
2
3
4
5
6
7
<?php
// Kalenderwoche von Montag bis Sonntag
function kalenderwocheStartEnde($jahr, $kw) {
return 'Montag: ' . date("d.m.Y", strtotime('' . $jahr . '-W' . sprintf("%02s", $kw) . '')) . ' bis ' .
'Sonntag: ' . date("d.m.Y", strtotime('' . $jahr . '-W' . sprintf("%02s", $kw) . '-7'));
}
?>
Ausgabe für Kalenderwoche 34:
Montag: 19.08.2025 bis Sonntag: 25.08.2025
Sommerzeit
1
2
3
4
5
6
7
8
9
<?php
// Sommerzeit
function sommerzeit($tag, $monat, $jahr) {
return "Sommerzeit: " .
(((date("I", mktime(2, 0, 0, $monat, $tag, $jahr))) == 1) ? "Ja" : "Nein") .
" (" . date("j.n", mktime(2, 0, 0, 3, 31 - date('w', mktime(2, 0, 0, 3, 31, $jahr)), $jahr)) .
" - " . date("j.n", mktime(2, 0, 0, 10, 31 - date('w', mktime(2, 0, 0, 10, 31, $jahr)), $jahr)) . ")";
}
?>
Ausgabe für den 24.8.2019:
Sommerzeit: Ja (31.3 - 27.10)
Schaltjahr
1
2
3
4
5
6
7
8
<?php
// Schaltjahr
// Jahreszahlen zwischen 1970 und 2099
function Schaltjahr($jahr) {
$schaltjahr = date("L", mktime(0, 0, 0, 1, 1, $jahr));
return 'Das Jahr ' . $jahr . ' ist ' . ($schaltjahr == 1 ? "" : "k") . 'ein Schaltjahr.';
}
?>
Ausgabe für das Jahr 2019:
Das Jahr 2019 ist kein Schaltjahr.
Julianisches Datum
1
2
3
4
5
6
7
8
<?php
// Julianisches Datum
function julian($tag, $monat, $jahr) {
$jd = jdtojulian(unixtojd(mktime(2, 0, 0, $monat, $tag, $jahr)));
$jd = explode("/", $jd);
return 'Julianisches Datum: ' . $jd[1] . '.' . $jd[0] . '.' . $jd[2];
}
?>
Ausgabe für den 24.8.2019:
Julianisches Datum: 11.8.2025
Öffnungszeiten
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Öffnungszeiten
$oeffnungszeiten[1] = "Montag: 10:00 bis 14:00 Uhr";
$oeffnungszeiten[2] = "Dienstag: 10:00 bis 18:00 Uhr";
$oeffnungszeiten[3] = "Mittwoch Geschlossen";
$oeffnungszeiten[4] = "Donnerstag: 10:00 bis 20:00 Uhr";
$oeffnungszeiten[5] = "Freitag: 10:00 bis 18:00 Uhr";
$oeffnungszeiten[6] = "Samstag: 10:00 bis 14:00 Uhr";
$oeffnungszeiten[7] = "Sonntag Geschlossen";
foreach ($oeffnungszeiten as $nr => $zeiten) {
if ($nr == date("N")) {
echo '<strong>' . $zeiten . '</strong><br>';
} else {
echo $zeiten . '<br>';
}
}
?>
Montag: 10:00 bis 14:00 Uhr
Dienstag: 10:00 bis 18:00 Uhr
Mittwoch Geschlossen
Donnerstag: 10:00 bis 20:00 Uhr
Freitag: 10:00 bis 18:00 Uhr
Samstag: 10:00 bis 14:00 Uhr
Sonntag Geschlossen
<style>
p#oeffnungszeiten {
padding: 10px 5px 10px 20px;
width: 310px;
margin: Auto;
background: none repeat scroll 0 0 #DBDBDB;
color: #CCCCCC;
text-shadow: 0 -1px 1px #3B3B3B, 0 1px 1px #FFFFFF;
box-shadow: inset 0px 0px 5px 5px #C3C3C3;
}
p#oeffnungszeiten strong {
text-shadow: 0 -1px 1px #0076AE, 0 1px 1px #FFFFFF;
}
</style>
Tipps
Wenn die date()-Funktion verwendet wird, dann sollte auch die richtige Zeitzone gesetzt werden,
mit: date_default_timezone_set("Europe/Berlin"); -
http://php.net/manual/de/timezones.europe.php
Das Jahr 2038 Problem (de.wikipedia.org)