254 lines
8.1 KiB
PHP
254 lines
8.1 KiB
PHP
<?php
|
|
/*=======================================================================
|
|
*
|
|
* calendar.inc.php
|
|
*
|
|
* Autor: Carsten Annacker
|
|
*
|
|
=======================================================================*/
|
|
|
|
/*
|
|
* Quellen:
|
|
* - Algorithmen zur Datumsberechnung
|
|
* http://home.nordwest.net/hgm/kalender/kal-6.htm
|
|
* - Claus Toenderings Calendar-FAQ
|
|
* http://www.tondering.dk/claus/calendar.html
|
|
* - Anregungen aus
|
|
* http://homepages.muenchen.org/bm612973/kalender.html,
|
|
* http://www.jandankert.de/service/sonstiges/kalender.html)
|
|
*
|
|
*/
|
|
|
|
function weekDayName($wDay)
|
|
{
|
|
$weekDayArr = array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
|
|
return $weekDayArr[$wDay];
|
|
}
|
|
|
|
function weekDayNameMapping($dayName, $mode = "0") {
|
|
$retDayName = "";
|
|
if ($mode == "1") :
|
|
if ($dayName == "Monday") : $retDayName = "Montag"; endif;
|
|
if ($dayName == "Tuesday") : $retDayName = "Dienstag"; endif;
|
|
if ($dayName == "Wednesday") : $retDayName = "Mittwoch"; endif;
|
|
if ($dayName == "Thursday") : $retDayName = "Donnerstag"; endif;
|
|
if ($dayName == "Friday") : $retDayName = "Freitag"; endif;
|
|
if ($dayName == "Saturday") : $retDayName = "Sonnabend"; endif;
|
|
if ($dayName == "Sunday") : $retDayName = "Sonntag"; endif;
|
|
else :
|
|
if ($dayName == "Monday") : $retDayName = weekDayName(0); endif;
|
|
if ($dayName == "Tuesday") : $retDayName = weekDayName(1); endif;
|
|
if ($dayName == "Wednesday") : $retDayName = weekDayName(2); endif;
|
|
if ($dayName == "Thursday") : $retDayName = weekDayName(3); endif;
|
|
if ($dayName == "Friday") : $retDayName = weekDayName(4); endif;
|
|
if ($dayName == "Saturday") : $retDayName = weekDayName(5); endif;
|
|
if ($dayName == "Sunday") : $retDayName = weekDayName(6); endif;
|
|
endif;
|
|
return $retDayName;
|
|
}
|
|
|
|
function monthName($month)
|
|
{
|
|
$monthNameArr = array (
|
|
"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli",
|
|
"August", "September", "Oktober", "November", "Dezember");
|
|
return $monthNameArr[--$month];
|
|
}
|
|
|
|
function leapYear ($year)
|
|
{
|
|
return (($year & 3) == 0) && ((($year % 100) != 0) || (($year % 400) == 0));
|
|
}
|
|
|
|
function daysPerMonth($year, $month)
|
|
{
|
|
$dpmArr = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
|
|
$result = $dpmArr[--$month];
|
|
|
|
if ($month == 1) if (leapYear ($year)) $result++;
|
|
return $result;
|
|
}
|
|
|
|
function addDays($year, $month, $day, $days)
|
|
{
|
|
if ($days >= 0)
|
|
{
|
|
$day += $days;
|
|
while ($day > daysPerMonth($year, $month))
|
|
$day -= daysPerMonth($year, $month++);
|
|
} else {
|
|
$day += $days;
|
|
while ($day <= 0)
|
|
$day += daysPerMonth($year, $month--);
|
|
}
|
|
|
|
return(array($month, $day));
|
|
}
|
|
|
|
function addMonths($year, $month, $months)
|
|
{
|
|
if ($months >= 0)
|
|
{
|
|
$month += $months;
|
|
while ($month > 12)
|
|
{
|
|
$month -= 12;
|
|
$year++;
|
|
}
|
|
} else {
|
|
$month += $months;
|
|
while ($month <= 0)
|
|
{
|
|
$month += 12;
|
|
$year--;
|
|
}
|
|
}
|
|
|
|
return(array($year, $month));
|
|
}
|
|
|
|
function easterSunday($year) {
|
|
$K = floor($year / 100);
|
|
$h = floor((3 * $K + 3) / 4);
|
|
$M = 15 + $h - floor((8 * $K + 13) / 25);
|
|
$S = 2 - $h;
|
|
$A = $year % 19;
|
|
$B = floor($year/4);
|
|
$D = (19* $A + $M) % 30;
|
|
$R = floor($D / 29) + (floor($D / 28) - floor($D / 29)) * floor($A / 11);
|
|
$OG = 21 + $D - $R;
|
|
$SZ = 7 - (($year + $B + $S) % 7);
|
|
$OE = 7 - (($OG - $SZ) % 7);
|
|
|
|
return (addDays($year, 3, 1, ($OG + $OE) - 1));
|
|
}
|
|
|
|
/*
|
|
* Bundesweite gesetzliche Feiertage:
|
|
* - Neujahr (1. Januar)
|
|
* - Karfreitag (erster Freitag vor Ostern)
|
|
* - Ostermontag (Ostersonntag ist der erste Sonntag nach dem ersten Vollmond nach der
|
|
* Frühlings-Tagundnachtgleiche (Vernal Equinox).
|
|
* - Maifeiertag, Tag der Arbeit (1. Mai)
|
|
* - Christi Himmelfahrt (sechster Donnerstag nach Ostern)
|
|
* - Pfingstmontag (siebter Montag nach Ostermontag)
|
|
* - Tag der deutschen Einheit (3. Oktober)
|
|
* - 1. Weihnachtstag (25. Dezember)
|
|
* - 2. Weihnachtstag (26. Dezember)
|
|
*
|
|
* Gesetzliche Feiertage nur in einigen Bundesländern:
|
|
* - Heilige Drei Könige (6. Januar; Baden-Württemberg, Bayern und Sachsen-Anhalt)
|
|
* - Fronleichnam (zweiter Donnerstag nach Pfingsten; Baden-Württemberg, Bayern, Hessen,
|
|
* Nordrhein-Westfalen, Rheinland-Pfalz, im Saarland und in einigen Gemeinden in
|
|
* Sachsen und Thüringen)
|
|
* - Mariä Himmelfahrt (15. August; Bayern, in Gemeinden mit überwiegend katholischer
|
|
* Bevölkerung und im Saarland)
|
|
* - Reformationstag (31. Oktober; Brandenburg, Mecklenburg-Vorpommern, Sachsen,
|
|
* Sachsen-Anhalt, Thüringen)
|
|
* - Allerheiligen (1. November; Baden-Württemberg, Bayern, Nordrhein-Westfalen,
|
|
* Rheinland Pfalz, Saarland)
|
|
* - Buß- und Bettag (zweiter Mittwoch vor dem ersten Advent; Sachsen)
|
|
*
|
|
* Quelle: http://www.kalenderlexikon.de/Kalender/FeierGesetz.htm
|
|
*
|
|
*/
|
|
|
|
function feiertag($year, $month, $day)
|
|
{
|
|
if ($month == 1 && $day == 1) return('Neujahr');
|
|
// if ($month == 1 && $day == 6) return(' Heilige Drei Könige');
|
|
if ($month == 5 && $day == 1) return('Maifeiertag');
|
|
if ($month == 8 && $day == 15) return(' Mariä Himmelfahrt');
|
|
if ($year > 1989 && $month == 10 && $day == 3) return('Tag der deutschen Einheit');
|
|
// if ($month == 10 && $day == 31) return(' Reformationstag');
|
|
// if ($month == 11 && $day == 1) return(' Allerheiligen');
|
|
if ($month == 12 && $day == 25) return('1. Weihnachtstag');
|
|
if ($month == 12 && $day == 26) return('2. Weihnachtstag');
|
|
// if ($month == 11)
|
|
// {
|
|
// $fourthAdvent = 24 - date ("w", mktime(0, 0, 0, 12, 24, $year));
|
|
// if (day == (fourthAdvent - 2)) return( ' Buß- und Bettag');
|
|
// }
|
|
if ($month == 3 || $month == 4 || $month == 5 || $month == 6)
|
|
{
|
|
$easter = easterSunday($year);
|
|
if ($month == $easter[0] && $day == $easter[1]) return('Ostersonntag');
|
|
$tempDate = addDays($year, $easter[0], $easter[1], -2);
|
|
if ($month == $tempDate[0] && $day == $tempDate[1]) return('Karfreitag');
|
|
$tempDate = addDays($year, $easter[0], $easter[1], 1);
|
|
if ($month == $tempDate[0] && $day == $tempDate[1]) return('Ostermontag');
|
|
$tempDate = addDays($year, $easter[0], $easter[1], 39);
|
|
if ($month == $tempDate[0] && $day == $tempDate[1]) return('Himmelfahrt');
|
|
$tempDate = addDays($year, $easter[0], $easter[1], 50);
|
|
if ($month == $tempDate[0] && $day == $tempDate[1]) return('Pfingstmontag');
|
|
$tempDate = addDays($year, $easter[0], $easter[1], 60);
|
|
if ($month == $tempDate[0] && $day == $tempDate[1]) return(' Fronleichnam');
|
|
}
|
|
// if (date ("w", mktime(0, 0, 0, $month, $day, $year)) == 6)
|
|
// return ('Samstag');
|
|
if (date ("w", mktime(0, 0, 0, $month, $day, $year)) == 0)
|
|
return ('Sonntag');
|
|
return('');
|
|
}
|
|
|
|
|
|
function addDaysComplete($year, $month, $day, $days)
|
|
{
|
|
if ($days >= 0)
|
|
{
|
|
$day += $days;
|
|
while ($day > daysPerMonth($year, $month))
|
|
{
|
|
$day -= daysPerMonth($year, $month++);
|
|
if ($month == 13)
|
|
{
|
|
$month = 1;
|
|
$year++;
|
|
}
|
|
}
|
|
} else {
|
|
$day += $days;
|
|
while ($day <= 0)
|
|
{
|
|
$day += daysPerMonth($year, $month--);
|
|
if ($month == 0)
|
|
{
|
|
$month = 12;
|
|
$year--;
|
|
}
|
|
}
|
|
}
|
|
|
|
return(array($year, $month, $day));
|
|
}
|
|
|
|
|
|
function getMonthAnchorLinks() {
|
|
$ret = "";
|
|
$ret .= "<a href=\"#1\">Jan. </a>";
|
|
$ret .= "<a href=\"#2\">Feb. </a>";
|
|
$ret .= "<a href=\"#3\">Mär. </a>";
|
|
$ret .= "<a href=\"#4\">Apr. </a>";
|
|
$ret .= "<a href=\"#5\">Mai </a>";
|
|
$ret .= "<a href=\"#6\">Jun </a>";
|
|
$ret .= "<a href=\"#7\">Jul. </a>";
|
|
$ret .= "<a href=\"#8\">Aug. </a>";
|
|
$ret .= "<a href=\"#9\">Sep. </a>";
|
|
$ret .= "<a href=\"#10\">Okt. </a>";
|
|
$ret .= "<a href=\"#11\">Nov. </a>";
|
|
$ret .= "<a href=\"#12\">Dez. </a>";
|
|
return $ret;
|
|
}
|
|
|
|
//include_once("../include/dbglobal.inc.php");
|
|
//$dateArr = array(2004, 1, 0);
|
|
//do {
|
|
// $dateArr = addDaysComplete($dateArr[0], $dateArr[1], $dateArr[2], 1);
|
|
// $dayName = feiertag($dateArr[0], $dateArr[1], $dateArr[2]);
|
|
// if ($dayName != "" && substr($dayName, 0, 1) != " ") {
|
|
// insertStmt("publicholiday", array("ph_year", $dateArr[0], "ph_month", $dateArr[1], "ph_day", $dateArr[2], "ph_name", $dayName));
|
|
// }
|
|
//} while ($dateArr[0] <= 2012);
|
|
|
|
?>
|