Tutorials - Entwicklung - Kalenderfunktionen in PHP (Teil 2) - Feiertage

Entwicklung: Kalenderfunktionen in PHP (Teil 2) - Feiertage

rob (57)

rob

12.08.2002 00:42

Vinn

  • 323 Postings, noch 27 bis zum nächsten Level (350)

Postings: 323

Kalenderfunktionen in PHP (Teil 2) - Feiertage

Montag, 15. Dezember 2003 23:13

  • 6.0/6 Votes: 1
6.0/6 Votes: 1

das Osterdatum berechnen, hiervon sind einige andere Feiertage abhängig
function getEaster(
$iYear = -1
){
// the Golden number
$iGolden= ($iYear % 19) + 1;

// the "Domincal number"
$iDom = ($iYear + (int)($iYear / 4) - (int)($iYear / 100) + (int)($iYear / 400)) % 7;
if ($iDom < 0)
$iDom += 7;

// the solar and lunar corrections
$iSolar = ($iYear - 1600) / 100 - ($iYear - 1600) / 400;
$iLunar = ((($iYear - 1400) / 100) *8) / 25;

// uncorrected date of the Paschal full moon
$iPFM= (3 - (11 * $iGolden) + $iSolar - $iLunar) % 30;
if ($iPFM < 0) $iPFM += 30;

// corrected date of the Paschal full moon
// days after 21st March
if (($iPFM == 29) || ($iPFM == 28 && $iGolden > 11))
{
$iPFM--;
}
$iTMP= (4 - $iPFM - $iDom) % 7;
if ($iTMP < 0)
$iTMP += 7;

// Easter as the number of days after 21st March */
$iEaster= $iPFM + $iTMP + 1;
if ($iEaster < 11)
{
$iMonth = 3;
$iDay = $iEaster + 21;
}
else
{
$iMonth = 4;
$iDay = $iEaster - 10;
}
$iEaster = mktime(0, 0, 0, $iMonth, $iDay, $iYear, -1);
return $iEaster;
}

mit dieser Funktion kann man dann die Feiertage bestimmen und z.B. in ein Array schreiben
function getHolidays(
$iYear
){
// Feste Feiertage short / long description
$aHoliday[mktime(0, 0, 0, 1, 1, $iYear)] = 'Neujahr';
$aHoliday[mktime(0, 0, 0, 1, 6, $iYear)] = 'Heilige 3 Könige';
$aHoliday[mktime(0, 0, 0, 5, 1, $iYear)] = '1. Mai';
$aHoliday[mktime(0, 0, 0, 8, 15, $iYear)] = 'Maria Himmelfahrt';
$aHoliday[mktime(0, 0, 0, 10, 3, $iYear)] = 'Tag der deutschen Einheit';
$aHoliday[mktime(0, 0, 0, 10, 31, $iYear)] = 'Reformationstag';
$aHoliday[mktime(0, 0, 0, 11, 1, $iYear)] = 'Allerheiligen';
$aHoliday[mktime(0, 0, 0, 12, 24, $iYear)] = 'Heiligabend';
$aHoliday[mktime(0, 0, 0, 12, 25, $iYear)] = '1. Weihnachtsfeiertag';
$aHoliday[mktime(0, 0, 0, 12, 26, $iYear)] = '2. Weihnachtsfeiertag';
$aHoliday[mktime(0, 0, 0, 12, 31, $iYear)] = 'Sylvester';

// Bewegliche Feiertage, von Ostern abhängig
$iEaster = getEaster($iYear);
$iEasterDay = date('d',$iEaster);
$iEasterMonth = date('m',$iEaster);
$iEasterYear = date('Y',$iEaster);

$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay-48,$iEasterYear)]= 'Rosenmontag';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay-46,$iEasterYear)]= 'Aschermittwoch';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay-2,$iEasterYear)] = 'Karfreitag';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay,$iEasterYear)] = 'Ostersonntag';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay+1,$iEasterYear)] = 'Ostermontag';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay+39,$iEasterYear)]= 'Himmelfahrt';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay+49,$iEasterYear)]= 'Pfingstsonntag';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay+50,$iEasterYear)]= 'Pfingstmontag';
$aHoliday[mktime(0,0,0,$iEasterMonth,$iEasterDay+60,$iEasterYear)]= 'Fronleichnam';

// Bewegliche Feiertage, vom ersten Advent abhängig
$iFirstAdvent = $getFirstAdvent($iYear);
$iAdventDay = date('d',$iFirstAdvent);
$iAdventMonth = date('m',$iFirstAdvent);
$iAdventYear = date('Y',$iFirstAdvent);

$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay,$iAdventYear)]= '1. Advent';
$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay+7,$iAdventYear)]= '2. Advent';
$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay+14,$iAdventYear)]= '3. Advent';
$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay+21,$iAdventYear)]= '4. Advent';
$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay-32,$iAdventYear)]= 'Buß- und Bettag';
$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay-28,$iAdventYear)]= 'Totensonntag';
$aHoliday[mktime(0,0,0,$iAdventMonth,$iAdventDay-35,$iAdventYear)]= 'Volkstrauertag';

return $aHoliday;
}

und hier noch was um andere 'wichtige' Tage zu berechnen
function getImportantDays(
$iYear
){
// summertime
for($i=31;$i<=40;$i--) {
if(date ("w", mktime(0,0,0,3,$i,$iYear)) == "0")
{
$iSummertime = mktime(0,0,0,3,$i,$iYear);
break;
}
}
// wintertime
for($i=30;$i<=40;$i--) {
if(date ("w", mktime(0,0,0,10,$i,date("Y"))) == "0")
{
$iWintertime = mktime(0,0,0,10,$i,date("Y"));
break;
}
}
// mothersday
$l=0;
for($i=0;$i<=31;$i++) {
if(date ("w", mktime(0,0,0,5,$i,date("Y"))) == "0")
$l++;
if($l==2)
{
$iMothersday = mktime(0,0,0,5,$i,date("Y"));
break;
}
}

$aImportantDays[mktime(0,0,0,1,1+44,$iYear)] = 'Valentienstag';
$aImportantDays[mktime(0,0,0,1,1+79+date("L"),$iYear)] = 'Frühlingsanfang';
$aImportantDays[mktime(0,0,0,1,1+171+date("L"),$iYear)] = 'Sommeranfang';
$aImportantDays[mktime(0,0,0,1,1+275+date("L"),$iYear)] = 'Herbstanfang';
$aImportantDays[mktime(0,0,0,1,1+355+date("L"),$iYear)] = 'Winteranfang';
$aImportantDays[$iSummertime] = 'Sommerzeitumstellung';
$aImportantDays[$iWintertime] = 'Winterzeitumstellung';
$aImportantDays[$iMothersday] = 'Muttertag';

return $aImportantDays;
}

Zuletzt editiert:Montag, 15. Dezember 2003 23:31

indigo

indigo

30.05.2009 20:14

  • 2 Postings, noch 48 bis zum nächsten Level (50)

Postings: 2

Re: Kalenderfunktionen in PHP (Teil 2) - Feiertage (@rob)

Samstag, 30. Mai 2009 20:19

Was steckt denn genau hinter dem  Smily? Leider finde ich keine Übersicht wo die Bilder einem Buchstabencode zugeordnet sind....

manu (53)

manu

03.09.2002 23:07

Aachen

  • 876 Postings, noch 24 bis zum nächsten Level (900)

Postings: 876

Re: Kalenderfunktionen in PHP (Teil 2) - Feiertage (@indigo)

Dienstag, 02. Juni 2009 10:08

Hallo Indigo,

was steckt denn genau einem Kommentar? Steht der in irgendeiner Beziehung zu dem Posting?

Für die Smilies gibt es noch keine Liste, ich werde die vll. die Tage mal nachreichen. Solange muss das reichen: 8-)

Gruß,
Manu
Signatur:\"I have not failed. I\'ve just found 10,000 ways that won\'t work.\" - Thomas Alva Edison (1847-1931)

indigo

indigo

30.05.2009 20:14

  • 2 Postings, noch 48 bis zum nächsten Level (50)

Postings: 2

Re: Kalenderfunktionen in PHP (Teil 2) - Feiertage (@manu)

Dienstag, 02. Juni 2009 23:56

Hallo Manu,

vielen Dank für deine Schnelle Antwort. Bitte entschuldige meine etwas rauhe Umgangsform im ersten Post so ganz ohne Anrede und Gruß...

Mein Kommentar hatte sich auf die Formel > $iLunar = ((($iYear - 1400) / 100) * / 25; < aus dem sehr guten Tutorial zu den Kalenderfunktionen bezogen. Leider wird in meiner Ansicht ein Teil der Formel durch den Smily zerhackt und ich konnte sie nicht mehr genau nachbauen ohne Vermutungen anzustellen.

Grüße
indigo

manu (53)

manu

03.09.2002 23:07

Aachen

  • 876 Postings, noch 24 bis zum nächsten Level (900)

Postings: 876

Re: Kalenderfunktionen in PHP (Teil 2) - Feiertage (@indigo)

Mittwoch, 03. Juni 2009 13:31

Oh, das hatte ich nicht gesehen...
In diesem Falle wird 8 ) ausgetauscht...

Gruß,
Manu

PS.: Habs gerade geändert - jetzt wird kein Code mehr durch Smilies ersetzt...
Editiert:Mittwoch, 03. Juni 2009 13:37
Signatur:\"I have not failed. I\'ve just found 10,000 ways that won\'t work.\" - Thomas Alva Edison (1847-1931)
Bookmark setzen!:Zu Google Bookmark hinzufügen.Zu bloglines hinzufügen.Zu Newsgator hinzufügen.Zu FURL hinzufügen.Zu DIGG hinzufügen.Zu Webnews hinzufügen.Zu Netscape hinzufügen.Zu Yahoo MyWeb hinzufügen.Zu spurl.net hinzufügen.Zu diigo hinzufügen.Zu Newsvine hinzufügen.Zu del.icio.us hinzufügen.Zu SIMPIFY hinzufügen.Zu Mister Wong hinzufügen.Zu Linkarena hinzufügen.Zu isio.de hinzufügen.Zu Oneview hinzufügen.Zu yigg.de hinzufügen.Zu reddit hinzufügen.Zu StumbleUpon hinzufügen.Zu Slashdot hinzufügen.Zu Blinklist hinzufügen.Zu Technorati hinzufügen.Zu Blogmarks hinzufügen.Zu Blinkbits hinzufügen.Zu ma.gnolia hinzufügen.Zu smarking.com hinzufügen.Zu Netvouz hinzufügen.Zu co.mments hinzufügen.Zu Connotea hinzufügen.Zu de.lirio.us hinzufügen.

Specials

Bytefresser Specials: Anno 1404

Umfrage

Welches ist Dein Lieblings-Anno?

(151 Stimmen)

1. Ganz klar: Anno 1800!
2. Anno 2205
3. Anno 2070
4. Anno 1404
5. Anno 1701
6. Anno 1503
7. Anno 1602
8. Anno Online

Benutzer-Counter

Besucher gesamt: 1.265.539
Besucher heute: 127
Besucher gestern: 286
Max. Besucher/Tag: 1.578
Gerade online: 15
Max. online: 167
Seiten gesamt: 28.899.207
Aufrufe diese Seite: 132

Tag-Cloud

  postings     entwicklung     dienstag     montag     formel     kommentar     @indigo     bytefresser     totensonntag     kalenderfunktionen     leider     @manu     mittwoch     edison     tutorials     himmelfahrt     level     aachen     thomas     smily     feiertage     dezember     signatur     pfingstsonntag     volkstrauertag     weihnachtsfeiertag     fronleichnam     advent     valentienstag     bewegliche