Berechnungen mit dem Datum
2 3Feiertage, Wochentage, Sonnenauf.- und Sonnenuntergänge, Mondphasen, Kalenderwochen, Sternzeichen, Geburtstage, Namenstage, Schaltjahre, Jahreszeiten, Zeitansagen, Weltzeituhren, …
![[Bildschirmfoto / Grafik]
Berechnungen mit dem Datum [Bildschirmfoto / Grafik]
Berechnungen mit dem Datum](img/berechnungen_mit_dem_datum.png)
Die folgenden (44) 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
- Weltzeituhr
- 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:16
"Civilian Twilight" start: 04:40
"Civilian Twilight" end: 19:50
"Nautical Twilight" start: 03:57
"Nautical Twilight" end: 20:33
"Astronomical Twilight" start: 03:08
"Astronomical Twilight" end: 21:22
Namenstage
Weltzeituhr
Siehe auch: Weltzeituhr - Zeitzonen
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.2017" <= 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, 2021); // Tag, Monat, Jahr ?>
Ausgabe:
HeiligabendMondphase
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(04, 18, 2021); // Monat, Tag, Jahr echo 'Phase: ' . $mond[0] . ' - Mondalter: ' . $mond[1] . ' Tage'; ?>
Ausgabe:
Phase: Zunehmender Neumond - Mondalter: 21 TageSternzeichen
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.6Sonnenaufgang 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(18, 04, 2021, "49.95", "10.95"); ?>
Ausgabe:
☼▲ Sonnenaufgang: 06:20 Uhr☼▼ Sonnenuntergang: 20:10 Uhr
☼◔ Sonnenscheindauer: 13.9 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, 2020); ?>
Ausgabe:
Vor 270 TagenWochentag
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 18.4.2021:
SonntagArbeitstage
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 4:
2Kalenderwoche
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 18.4.2021:
15Kalenderwoche 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 15:
Montag: 12.04.2021 bis Sonntag: 18.04.2021Sommerzeit
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 18.4.2021:
Sommerzeit: Ja (28.3 - 31.10)Sommerzeit (2)
Script von: Andrzej Kossowski
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// Sommerzeit berechnen
$aktuelles_jahr = date("Y"); // Hier das aktuelle Jahr
function sommerzeit_2($jahr) {
return date("j.n", mktime(2, 0, 0, 3, 31 -
date('w', mktime(2, 0, 0, 3, 31, $jahr)), $jahr)) . "." . $jahr .
" bis " . date("j.n", mktime(2, 0, 0, 10, 31 -
date('w', mktime(2, 0, 0, 10, 31, $jahr)), $jahr)) . "." . $jahr;
}
echo "Die Sommerzeit des Jahres " . $aktuelles_jahr . " dauert von " . sommerzeit_2($aktuelles_jahr);
?>
Ausgabe:
Die Sommerzeit des Jahres 2021 dauert von 28.3.2021 bis 31.10.2021Schaltjahr
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 2021:
Das Jahr 2021 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 18.4.2021:
Julianisches Datum: 5.4.2021Ö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>