Files
scripts/feiertage.pl
2025-06-03 23:03:08 +02:00

135 lines
3.1 KiB
Perl
Raw Permalink Blame History

package Feiertage;
sub feiertage{
# Aufruf
#
# require 'feiertage.pl';
# %f=&feiertage($jahr,$region);
#
# $jahr=gew<65>nschtes Jahr
#
# $region = Leer = Deutschland
# = Bayern: Deutschland + Lokale Feiertage Bayerns
# = falls erweitert wird: Regionen getrennt durch Leerzeichen ' '
#
# Einsatzbereich des Scriptes 1.1.1970 - 31.12.2038, diese Limitierung erfolgt durch timelocal()
# auf neueren Systemen kann dieses Enddatum aber durchaus <20>berschritten werden
#
# R<>ckgabewerte
# alle %feiertage{Name des Feiertages}="tag.monat.";
#
use strict;
require 'timelocal.pl';
my $eintag=86400; #Sekunden des Tages
my $jahr=shift;
my $region=shift;
my ($i,$j,$c,$h,$g,$l,$EasterMonth,$EasterMonth,$EasterDay,$EasterDate,$day,$mday,$mon,$wert);
my %feiertage=();
#
# copyright 2001 by Peter Baumann
# Verwendung und Weitergabe nur gestattet, wenn der Hinweis auf den Ersteller dieses Scriptes erhalten bleibt
#
$g = $jahr % 19;
$c = int($jahr/100);
$h = ($c - int($c/4)-int((8*$c+13)/25)+ 19*$g + 15) % 30;
$i = $h - int($h/28)*(1 -int($h/28)*int(29/($h+1))*int((21 - $g)/11));
$j = ($jahr + int($jahr/4) + $i + 2 - $c + int($c/4));
$j = $j % 7;
$l = $i - $j;
$EasterMonth = 3 + int(($l+40)/44);
$EasterDay = $l + 28 - 31*int($EasterMonth/4);
if ($EasterMonth==3) {
$mday=$EasterDay;
$mon=3;
$EasterDate = 'March ' . $EasterDay . ', ' . $jahr;
}
else { $mday=$EasterDay;
$mon=4;
$EasterDate = 'April ' . $EasterDay . ', ' . $jahr;}
my $epoche=&maketime($mday,$mon,$jahr);
my $datum=&getdays($epoche); # Das w<>re der Ostersonntag, denn danach richten
# sich alle religi<67>sen Feiertage wie Ostern,
# Pfingsten, Fronleichnam, Himmelfahrt oder auch
# "Rosenmontag", der 7 Wochen vor Ostermontag ist
### Feste Feiertage, das kann ja jeder ...
$feiertage{'Neujahr'}="1.1.";
$feiertage{'Tag der Arbeit'}="1.5.";
$feiertage{'Tag der deutschen Einheit'}="3.10.";
$feiertage{'1. Weihnachtstag'}="25.12.";
$feiertage{'2. Weihnachtstag'}="26.12";
my $owert=$epoche;
###
$wert=$owert-2*$eintag;
$datum=&getdays($wert);
$feiertage{'Karfreitag'}=$datum;
###
$wert=$owert+$eintag;
$datum=&getdays($wert);
$feiertage{'Ostermontag'}=$datum;
###
$wert=$owert+49*$eintag;
$datum=&getdays($wert);
$feiertage{'Pfingstsonntag'}=$datum;
###
$wert=$owert+50*$eintag;
$datum=&getdays($wert);
$feiertage{'Pfingstmontag'}=$datum;
###
$wert=$owert+39*$eintag;
$datum=&getdays($wert);
$feiertage{'Christi Himmelfahrt'}=$datum;
###
my @region=split(/ /,$region);
foreach $region (@region){
## Region Bayern ###
if ($region eq 'Bayern'){
$wert=$owert+60*$eintag;
$datum=&getdays($wert);
$feiertage{'Fronleichnam'}=$datum;
###
$feiertage{'Allerheiligen'}="1.11.";
###
$feiertage{'Heilige drei K<>nige'}="6.1.";
} ## Ende Bayern
}
return %feiertage;
}
sub getdays{
my $wert=shift;
(my $sec,my $min,my$ hour,my $mday,my $mon,my $yr,my $wday,my $yday,my $isdst) = localtime($wert);
$mon++;
$yr+=1900;
my $datum=$mday.'.'.$mon.'.';
return $datum;
}
sub maketime{
my $mday=shift;
my $mon=shift;
my $jahr=shift;
return timelocal(0,0,0,$mday,$mon-1,$jahr-1900);
}
1;