-
-
Save Radiotechniman/fc086ae40d4018aa5ff7525dc5e157e9 to your computer and use it in GitHub Desktop.
Feestdagen berekenen
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// (c) Tom Van Looy <tom@ctors.net> https://ctors.net/isc_license.txt | |
// Alle feestdagen kunnen berekend worden, de berekende zijn allemaal | |
// afhankelijk van pasen. PHP heeft een functie easter_date(). | |
// Makkie dus. Hoe easter_date() zelf werkt kan je hier raadplegen: | |
// https://github.com/php/php-src/blob/master/ext/calendar/easter.c | |
// Geen parameter? Doen we gewoon dit jaar toch. | |
$jaar = date('Y'); | |
if ($argc > 1) { | |
$jaar = (int) $argv[1]; | |
} | |
// beperking van easter_date() | |
if ($jaar < 1970 || $jaar > 2037) { | |
$jaar = date('Y'); | |
} | |
ini_set('date.timezone', 'Europe/Amsterdam'); | |
$formatter = new \IntlDateFormatter('nl_BE', null, null); | |
$formatter->setPattern('E dd LLL Y'); | |
$format = function(\DateTime $datum, $omschrijving) use ($formatter) { | |
$formattedDatum = $formatter->format($datum); | |
if (\strlen($formattedDatum) === 14) { | |
$formattedDatum = \substr($formattedDatum, 0, 10) . ' ' . \substr($formattedDatum, -4); | |
} | |
return "$formattedDatum : $omschrijving\n"; | |
}; | |
/* ***** Voor Nederland ***************************************************** */ | |
// vaste dagen | |
$nieuwjaar = new \DateTime("$jaar-01-01"); | |
$bevrijdingsdag = new \DateTime("$jaar-05-05"); | |
$kerstmis = new \DateTime("$jaar-12-25"); | |
$tweedekerstdag = new \DateTime("$jaar-12-26"); | |
$koningsdag = new \DateTime("$jaar-04-27"); | |
// Als Koningsdag op zondag valt is het de dag ervoor | |
if ($koningsdag->format('w') === '0') { | |
$koningsdag->sub(new DateInterval('P1D')); | |
} | |
// berekend | |
$pasen = new \DateTime(); | |
$pasen->setTimestamp(\easter_date($jaar)); // bedankt PHP | |
$paasMaandag = clone $pasen; | |
$paasMaandag->add(new \DateInterVal('P1D')); // 1 dag na pasen | |
$goedeVrijdag = clone $pasen; | |
$goedeVrijdag->sub(new \DateInterval('P2D')); // 2 dag voor pasen | |
$olhHemelvaart = clone $pasen; | |
$olhHemelvaart->add(new \DateInterVal('P39D')); // 39 dagen na pasen | |
$pinksteren = clone $olhHemelvaart; | |
$pinksteren->add(new \DateInterVal('P10D')); // 10 dagen na OLH hemelvaart | |
$pinksterMaandag = clone $pinksteren; | |
$pinksterMaandag->add(new \DateInterVal('P1D')); // 1 dag na pinksteren | |
echo "\nFeestdagen Nederland $jaar\n--------------------------\n\n" . | |
$format($nieuwjaar, 'Nieuwjaar') . | |
$format($goedeVrijdag, 'Goede vrijdag') . | |
$format($pasen, 'Pasen') . | |
$format($paasMaandag, 'Paasmaandag') . | |
$format($koningsdag, 'Koningsdag') . | |
$format($bevrijdingsdag, 'Bevrijdingsdag') . | |
$format($olhHemelvaart, 'O.L.H. Hemelvaart') . | |
$format($pinksteren, 'Pinksteren') . | |
$format($pinksterMaandag, 'Pinkstermaandag') . | |
$format($kerstmis, 'Kerstmis') . | |
$format($tweedekerstdag, '2e Kerstdag') . | |
"\n"; | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment