135 lines
3.1 KiB
Perl
135 lines
3.1 KiB
Perl
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; |