Übersicht
Ich bin bis vor einigen Tagen davon ausgegangen das der Jahreszeiten-Wechsel zu statischen, fixen Zeitpunkten im Jahr stattfindet.
Das ist aber falsch!
Da ich immer mal wieder an meiner internationalen PHP Feiertags-Library Niirrty\Holiday arbeite und gerade das Feature der nicht arbeitsfreien Feiertage einbaue bin ich notgezwungener Massen über Frühlings- Sommer-, Herbst- und Winter-Start gestolpert und muste feststellen das es wohl garnicht so einfach ist hier die realen Zeitpunkte zu ermitteln.
Verschiedene Quellen im Netz haben mich dann auf die richtige Spur gebracht.
Berechnungsgrundlagen
Die Zeitspanne
Jeder Anfang einer Jahreszeit verschiebt sich im Vergleich zum Vorjahr um eine spezifische Zeitspanne.
Nord | Süd | Tage | Stunden | Minuten | Sekunden | Gesamt in Tagen | Gesamt in Sekunden |
---|---|---|---|---|---|---|---|
Frühling | Herbst | 365 | 5 | 49 | 2 | 365,24238 | 31556942 |
Sommer | Winter | 365 | 5 | 47 | 57 | 365,24164 | 31556877 |
Herbst | Frühling | 365 | 5 | 48 | 31 | 365,24203 | 31556911 |
Winter | Sommer | 365 | 5 | 49 | 33 | 365,24275 | 31556973 |
Das alleine ist aber wenig hilfreich, da hier noch vollkommen der Bezug fehlt.
Das Referenzdatum
Für verschiedene näher liegende Zeiträume werden dazu die folgenden Zeitpunkte als Referenzdatum empfohlen, von dem aus die Berechnungen für den angegebenen Jahres-Zeitraum stattfinden sollten.
Nord | Süd | Referenzdatum |
---|---|---|
1700-1900 | ||
Frühling | Herbst | 21.03.1805 00:57:30 UTC |
Sommer | Winter | 21.06.1805 21:42:30 UTC |
Herbst | Frühling | 23.09.1805 11:22:30 UTC |
Winter | Sommer | 21.12.1805 05:06:30 UTC |
1900-2100 | ||
Frühling | Herbst | 20.03.2005 11:33:19 UTC |
Sommer | Winter | 21.06.2005 06:39:11 UTC |
Herbst | Frühling | 22.09.2005 22:16:34 UTC |
Winter | Sommer | 21.12.2005 18:34:51 UTC |
Weitere Daten können z.B. hier entnommen werden.
Beispiel in PHP
Es soll der Sommeranfang (Sommer-Sonnenwende) für das Jahr 2018 berechnet werden
Referenzdatum ist dafür aus der obigen Liste 2005-06-21 06:39:11 UTC
von 2005 bis 2018 sind 13 Jahre Unterschied
Das bedeutet es müssen 13 x 365 Tage 5h 47m 57s
oder 13 x 31556877 Sekunden
hinzugefügt werden.
<?php
// Jahr für das berechnet werden soll
$yearRequired = 2018;
// Referenzdatum für Sommeranfang in der nördl. Hemisphäre initialisieren
$refDate = new \DateTime( '2005-06-21 06:39:11 UTC' );
// Differenz in Jahren berechnen. Kann positiv oder negativ sein!
$yearDifference = $yearRequired - (int) $refDate->format( 'Y' );
// Interval festlegen
$interval = new \DateInterval( 'PT' . ( $yearDifference * 31556877 ) . 'S' );
// Intervall hinzufügen (positive Sekunden) ober abziehen (negative Sekunden)
if ( $yearDifference > 0 )
{
$refDate->add( $interval );
}
else if ( $yearDifference < 0 )
{
$refDate->sub( $interval );
}
// Berechnetes Datum ausgeben
echo $refDate->format( 'Y-m-d H:i' );