Jahreskalender Sourcecode
Die neue Version des Jahreskalender nicht eine Freie Software, Version 2.0 ab 27.10.2010.
Jahreskalender Version 1.4
Die Version 1.4 vom 17.06.2007 ist ein Freie Software nach GPL v.3 und darf so verwendet werden, beim verwenden dieses Codes sollte zumindest ein Link auf diese Webseite vorhanden sein.
<?php /* title : Jahreskalender MST * author : Marcel Steinger * date : 17.06.2007 * desc : Jahresueberischtskalender alles auf einer Seite, die Monaten sind Vertikal. * Gültige Werte sind die Jahre 1970 - 2037. * Ein Jahr hat 53 Wochen wenn es an einem Do beginnt oder endet. * * history : V.0.1 - 12.02.2004 - Basic Version * V.0.2 - 13.02.0204 - mit Feiertagen, Neujahr,Bertoldtag, Drei Könige, Josefstag, Bundesfeier,Himmelfahrt, Allerheiligen, Empfängnis, Hl. Abend, Weihnachten, Stephanstag und Silvester * V.0.3 - 15.02.2004 - mit variablen Festtage; Ostern, Ostermontag, Palmsonntag, Pfingsten, Pfingstmontag, Karfreitag, Weisser Sonntag, Auffahrt, Aschermittw und Fronleichnam * V.0.4 - 16.02.2004 - mit Feiertag, Muttertag, Tag der Arbeit, Klaustag und Valentienstag * V.0.5 - 17.02.2004 - mit Feiertag, Advents, Eidg. Buss und Bettag. * V.0.6 - 18.02.2004 - Ausdruck in PDF mit http://www.fpdf.org * V.1.0 - 19.02.2004 - erste Version * V.1.1 - 26.02.2004 - Zeitraumfehlermeldung * V.1.2 - 02.03.2004 - Anzeigen des PHP Sourecode * V.1.3 - 28.06.2004 - Anzeige des aktuellem Tag * V.1.4 - 17.06.2007 - Neu Vatertag */ $version="1.4"; if (isset($_GET['c'])) { $jahr=$_GET['c']; $jahrback=$jahr-1; $jahrfwd=$jahr+1; }else{ $jahr=date("Y"); $jahrback=$jahr-1; $jahrfwd=$jahr+1; } if (($jahr<=1969) || ($jahr>=2038)) { $year=date("Y"); echo "<a href=\"$_SERVER[PHP_SELF]?c=$year\">Zurück nach $year</a>"; echo"<h2>Mit dem Jahr $jahr, sind Sie ausserhalb des erlaubten Zeitraumes, gültige Jahre sind 1970 - 2037.</h2>"; exit; } $title='J A H R E S K A L E N D E R'; $author='Marcel Steinger'; // Font and colors $bgcolorso = '#FFFF00'; $bgcolorweek = '#F0F0F0'; //setlocale (LC_ALL, 'de_DE'); $monat=date("n"); $heute=date("d. M. Y"); $monate=array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); $wochentage=array("So","Mo","Di","Mi","Do","Fr","Sa"); /* Sonntagsfeiertage wie Ostern, Muttertag etc. * http://www.salesianer.de/util/kalfaq.html / http://home.arcor.de/reiner.kuprian/Information/Ostern/ * Ostern ist seit dem Jahr 325 als der erste Sonntag nach dem ersten Vollmond des Frühlings definiert. * Carl Friedrich Gauss hat 1800 seine Osterformel entwickelt, die die Hinzuziehung von astronomischen Tafeln überflüssig macht * Hierauf basiert die Funktion easter_date(). */ $festtagearray=array( date("j.n",mktime(0,0,0,1,1,$jahr)) => 'Neujahr', date("j.n",mktime(0,0,0,8,1,$jahr)) => 'Bundesfeier', date("j.n",mktime(0,0,0,12,25,$jahr)) => 'Weihnachten', date("j.n",mktime(0,0,0,12,26,$jahr)) => 'Stephanstag', date("j.n",mktime(0,0,0,5,(14-date("w",mktime(0,0,0,5,0,$jahr))),$jahr)) => 'Muttertag', // Zweite Sonntag im Mai date("j.n",mktime(0,0,0,6,(21-date("w",mktime(0,0,0,6,0,$jahr))),$jahr)) => 'Vatertag', // Dritter Sonntag im Juni ab 2007 date("j.n",mktime(0,0,0,9,(21-date("w",mktime(0,0,0,9,0,$jahr))),$jahr)) => 'Eidg. Bettag', // Dritte Sonntag im September date("j.n",easter_date($jahr)) => 'Ostern', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))-7,$jahr)) =>'Palmsonntag', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))-2,$jahr)) =>'Karfreitag', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))+1,$jahr)) =>'Ostermontag', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))+7,$jahr)) =>'Weisser So', // Der erste Sonntag nach Ostern date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))+39,$jahr)) =>'Auffahrt', // Christi Himmelfahrt auch Vatertag genannt. date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))+49,$jahr)) =>'Pfingsten', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))+50,$jahr)) =>'Pfingstmontag' ); $festtage=array_keys ($festtagearray); $festtagename=array_values ($festtagearray); // Festtage ohne Sonntägliche feiertage $feiertagarray=array( // date("j.n",mktime(0,0,0,4,(23-date("w", mktime(0,0,0,4,1,$jahr))),$jahr)) => 'Sechseläuten', // 1.) In der Regel am 3. Montag im April. 2.)Fällt dieser Termin in die Karwoche, so wird das Sechsläuten am zweiten Montag abgehalten. 3. Fällt der dritte Montag im April auf den Ostermontag, so wird das Fest auf den vierten Montag verschoben. 3.) Fällt dieser Termin auf den ersten Mai, wird der Termin auf ein Wochenende anfangs April bzw. Ende März festgesetzt // date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))-48,$jahr)) =>'Rosenmontag', // date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))-47,$jahr)) =>'Fastnacht', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))-46,$jahr)) =>'Aschermittwo', date("j.n",mktime(0,0,0,date("m",easter_date($jahr)),date("d",easter_date($jahr))+60,$jahr)) =>'Fronleichnam', // date("j.n",mktime(0,0,0,11,(26+(7-date("w",mktime(0,0,0,11,26,$jahr))))-11,$jahr)) => 'Buss & Bettag', // Deutscher Buß- und Bettag, dieser liegt 11 Tage vor dem 1. Advent. http://www.php-resource.de/forum/showthread/t-11365.html date("j.n",mktime(0,0,0,11,26+(7-date("w",mktime(0,0,0,11,26,$jahr))),$jahr)) => '1.Advent', // Der 1. Advent ist der Sonntag nach dem 26. November date("j.n",mktime(0,0,0,11,(26+(7-date("w",mktime(0,0,0,11,26,$jahr))))+7,$jahr)) => '2.Advent', date("j.n",mktime(0,0,0,11,(26+(7-date("w",mktime(0,0,0,11,26,$jahr))))+14,$jahr)) => '3.Advent', date("j.n",mktime(0,0,0,11,(26+(7-date("w",mktime(0,0,0,11,26,$jahr))))+21,$jahr)) => '4.Advent', date("j.n",mktime(0,0,0,1,2,$jahr)) => 'Berchtoldstag', date("j.n",mktime(0,0,0,1,6,$jahr)) => 'Dreikönigstag', date("j.n",mktime(0,0,0,2,14,$jahr)) => 'Valentinstag', date("j.n",mktime(0,0,0,3,19,$jahr)) => 'Josefstag', date("j.n",mktime(0,0,0,5,1,$jahr)) => 'Tag der Arbeit', date("j.n",mktime(0,0,0,8,15,$jahr)) => 'Himmelfahrt', date("j.n",mktime(0,0,0,11,1,$jahr)) => 'Allerheiligen', date("j.n",mktime(0,0,0,12,6,$jahr)) => 'St. Nikolaus', date("j.n",mktime(0,0,0,12,8,$jahr)) => 'M-Empfängnis', date("j.n",mktime(0,0,0,12,24,$jahr)) => 'Heilig Abend', date("j.n",mktime(0,0,0,12,31,$jahr)) => 'Silvester' ); $feiertage=array_keys ($feiertagarray); $feiertagename=array_values ($feiertagarray); if (isset($_GET['printpdf'])) { // Beginn PDF define('FPDF_FONTPATH','fonts/pdf/'); require('fonts/pdf/fpdf.php'); $pdf=new FPDF('L','mm','A4'); $pdf->AddPage(); $pdf->SetTitle($title.' '.$jahr); $pdf->SetAuthor($author); $pdf->SetFont('Arial','B',12); $pdf->Cell(22,8,$jahr,1,0,'C'); $pdf->Cell(231,8,$title,1,0,'C'); $pdf->Cell(22,8,$jahr,1,0,'C'); $pdf->Ln(); $pdf->Cell(0,2); $pdf->Ln(); for ($spalte=1;$spalte<=12;$spalte++) { $this_month=$spalte; $pdf->SetFont('Arial','B',10); $pdf->Cell(22,6,$monate[$this_month-1],1,0,'C'); $pdf->Cell(1,7); } $pdf->Ln(); $pdf->Cell(22,1); $pdf->Ln(); for ($i=1;$i<=31;$i++) { for ($spalte=1;$spalte<=12;$spalte++) { $this_month=$spalte; $wochentag=date("w",mktime(0,0,0,$this_month,$i,$jahr)); $letzter=date("t",mktime(0,0,0,$this_month,1,$jahr)); $spez="$i.$this_month"; $pdf->SetFillColor(255,255,0); if ($i<=$letzter){ if (in_array ($spez,$festtage,TRUE)){ $f=(array_search ($spez,$festtage)); $pdf->SetFont('Arial','',9); $pdf->Cell(5,5,$i,1,0,'R',1); $pdf->SetFont('Arial','',7); $pdf->Cell(17,5,$festtagename[$f],1,0,'L',1); } elseif (in_array ($spez,$feiertage,TRUE)){ $f=(array_search ($spez,$feiertage)); if (($wochentag==0)||($wochentag==6)){ $pdf->SetFont('Arial','',9); $pdf->Cell(5,5,$i,1,0,'R',1); $pdf->SetFont('Arial','',7); $pdf->Cell(17,5,$feiertagename[$f],1,0,'L',1); }else{ $pdf->SetFont('Arial','',9); $pdf->Cell(5,5,$i,1,0,'R'); $pdf->SetFont('Arial','',7); $pdf->Cell(17,5,$feiertagename[$f],1); } } elseif (($wochentag==0)||($wochentag==6)){ $pdf->SetFont('Arial','',9); $pdf->Cell(5,5,$i,1,0,'R',1); $pdf->SetFont('Arial','',7); $pdf->Cell(17,5,$wochentage[$wochentag],1,0,'L',1); } elseif ($wochentag==1){ $woche=date("W",mktime(0,0,0,$this_month,$i,$jahr)); $pdf->SetFont('Arial','',9); $pdf->Cell(5,5,$i,1,0,'R'); $pdf->SetFont('Arial','',7); $pdf->Cell(17,5,$wochentage[$wochentag].' Wo '.$woche,1); }else{ $pdf->SetFont('Arial','',9); $pdf->Cell(5,5,$i,1,0,'R'); $pdf->SetFont('Arial','',7); $pdf->Cell(17,5,$wochentage[$wochentag],1); } }else{ $pdf->Cell(5,5,'',0); $pdf->Cell(17,5,'',0); } if ($spalte<=11){ $pdf->Cell(1,7); } } $pdf->Ln(); } $pdf->SetFont('Arial','',8); $pdf->Cell(252,6,'Jahreskalender von '.$author.', erstellt '.$heute,0,0,'R'); $pdf->Write(6,'- www.steinger.ch','http://www.steinger.ch/'); $pdf->Output(); // End PDF } ?> <html> <head> <meta http-equiv-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <title>Steinger's Jahreskalender </title> <link rel=stylesheet type="text/css" href="jahreskalender_14-style.css"> <meta content="Steinger's Jahreskalender v 1.4" name="generator"> <meta name="author" content="Marcel Steinger"> <style type="text/css"> td { font-size:7pt; } </style> <script language="JavaScript1.1"> window.defaultStatus = "steinger.ch"; </script> </head> <body text="#000000" bgcolor="#ffffff" link="#0000ff" vlink="#0000ff" topmargin=0 marginheight=0 > <?php // Begin HTML Page echo "<a href=\"$_SERVER[PHP_SELF]?c=$jahrback\">Ein Jahr zurück</a> | <a href=\"$_SERVER[PHP_SELF]?c=$jahrfwd\">Ein Jahr vorwärts</a> | <a href=\"$_SERVER[PHP_SELF]?printpdf&c=$jahr\">Ausdruck in PDF</a> | <a href=\"http://www.steinger.ch/projekte:jahreskalender_sourcecode\">View Code</a> | <span style=\"font-size:8pt; font-family:Verdana\">© Jahreskalender v.$version von $author, Heute $heute - </span><a href=\"http://www.steinger.ch\">www.steinger.ch</a>"; echo "<table border=\"0\" width=\"100%\">"; echo "<tr><th colspan=\"1\"align=\"center\" style=\"font-size:18pt; color:#ff9900;\">".$jahr."</th><th colspan=\"10\" align=\"center\" style=\"font-size:18pt; color:#ff9900;\">$title</th><th colspan=\"1\" align=\"center\" style=\"font-size:18pt; color:#ff9900;\">".$jahr."</th></tr>"; echo "<tr>"; $today = date("j.n.Y"); for ($spalte=1;$spalte<=12;$spalte++) { $this_month=$spalte; echo "<td valign=\"top\"><table border=\"0\" align=\"center\">"; echo "<th colspan=\"2\" align=\"center\" style=\"font-size:10pt; color:#666699;\">".$monate[$this_month-1]."</th>"; $wochentag=date("w",mktime(0,0,0,$this_month,1,$jahr)); $letzter=date("t",mktime(0,0,0,$this_month,1,$jahr)); $i=1; while($i<=$letzter){ $spez="$i.$this_month"; $spez_today="$i.$this_month.$jahr"; if ($spez_today == $today){ $today_color = "blue"; } else { $today_color = "none"; } if (in_array ($spez,$festtage,TRUE)){ $f=(array_search ($spez,$festtage)); echo "<tr><td style=\"width:15px;text-align:right;border:medium inset $today_color;background-color=$bgcolorso\">$i</td><td bgcolor=$bgcolorso nowrap>$festtagename[$f]</td></tr>"; } elseif (in_array ($spez,$feiertage,TRUE)){ $f=(array_search ($spez,$feiertage)); if (($wochentag==0)||($wochentag==6)){ echo "<tr><td style=\"width:15px;text-align:right;border:medium inset $today_color;background-color=$bgcolorso\">$i</td><td bgcolor=$bgcolorso nowrap>$feiertagename[$f]</td></tr>"; }else{ echo "<tr><td style=\"width:15px;text-align:right;border:medium inset $today_color;background-color=$bgcolorweek\">$i</td><td bgcolor=$bgcolorweek nowrap>$feiertagename[$f]</td></tr>"; } } elseif (($wochentag==0)||($wochentag==6)){ echo "<tr><td style=\"width:15px; text-align:right;border:medium inset $today_color;background-color=$bgcolorso\">$i</td><td bgcolor=$bgcolorso>".$wochentage[$wochentag]."</td></tr>"; } elseif ($wochentag==1){ $woche=date("W",mktime(0,0,0,$this_month,$i,$jahr)); echo "<tr><td style=\"width:15px;text-align:right;border:medium groove $today_color;background-color=$bgcolorweek\">$i</td><td bgcolor=$bgcolorweek nowrap>".$wochentage[$wochentag]." Wo $woche</td></tr>"; }else{ echo "<tr><td style=\"width:15px;text-align:right;border:medium inset $today_color;background-color=$bgcolorweek\">$i</td><td bgcolor=$bgcolorweek>".$wochentage[$wochentag]."</td></tr>"; } if ($wochentag>=6){ $wochentag=0; }else{ $wochentag++; } $i++; } echo "</table></td>"; } echo "</tr>"; echo "</table>"; // *** ENDE Jahreskalender *** ?> </script> </body> </html>
Das erstellen von PDF basiert auf http://www.fpdf.org.
Ostern Berechnung
Diese Funktion ist nur einzubauen wenn in der PHPini die Calendar funktion nicht aktiviert ist.
function Ostern($jahr,$add_days=0)
{
/*
Ostern (Sonntag)
Ostern nach Physikalisch Technische Bundesanstalt
http://www.ptb.de/de/org/4/44/441/oste.htm
http://www.php-resource.de/forum/showthread/t-14639.html
*/
$K = floor( $jahr / 100 );
$M = 15 + floor(( 3*$K+3 ) / 4 ) - floor(( 8*$K+13 ) / 25 );
$S = 2 - floor(( 3*$K+3 ) / 4 );
$A = $jahr%19;
$D = ( 19 * $A + $M) % 30;
$R = floor( $D / 29 ) + ( floor( $D / 28 ) - floor( $D / 29 )) * floor( $A / 11 );
$OG = 21 + $D - $R; // Märzdatum des Ostervollmonds (= 14. Tag des ersten Monats im Mondkalender, genannt Nisanu)
$SZ = 7 - ( ($jahr + floor( $jahr / 4 ) + $S ) % 7 ); // - Datum des 1. Sonntags im März
$OE = 7 - ( ($OG - $SZ) % 7 );
$OS = $OG + $OE;
// echo date("d.M.Y", mktime(0,0,0,3,$OS,$jahr)); Orginal
$easterdate=date("d.n", mktime(0,0,0,3,$OS,$jahr));
//echo "<p> #1 $easterdate";
return $easterdate;
}
Mondphasen
Im Jahreskalender ab Version 2 ist ein Mondphasen Kalender integriert. Dazu wurde der PHP Code moonphase.inc.php (http://www.sentry.net/~obsid/moonphase) verwendet. Dieser Code wiederum basiert auf das Perl Modul Astro::MoonPhase (http://search.cpan.org/~brett/Astro-MoonPhase-0.60/MoonPhase.pm).
