Jak vytvořit PHP kalendář?

/ Blog / PHP / Jak vytvořit PHP kalendář?
Článek je už starý a informace v něm nemusí být relevantní, mohou být zastaralé či dokonce již neplatné. Články nepíši, informace si poznamenávám jinam, sledovat mě můžete na Githubu, Medium či jiných "IT" síťích. 👋 V případě dotazu mi napište na e-mail či telegram (sekce kontakt).

Publikováno v sekci PHP v 12. 1. 2008 - 12:01

Potřebujete PHP kalendář? Hledal jsem na internetu a nacházel jsem příliš robustní třídy či velmi ošklivé kódy, které začátečník nemůže chápat. Napsal jsem vlastní kalendář, jehož kód je velmi krátký a myslím, že nikomu nebude dělat problémy.

 1: <?php // odkazy na konkretni dny
 2: $selected_days[2009][2][24] = true;
 3: $selected_days[2009][2][27] = true;
 4: $selected_days[2009][3][5]  = true;
 5: $selected_days[2009][3][17] = true;
 6: $selected_days[2009][4][20] = true;</p>
 7: <p>// prvotni inicializace, nastavime aktualni cas,  mesic a rok
 8: $date = time();
 9: $day = date('d', $date);
10: $month = date('m', $date);
11: $year = date('Y', $date);</p>
12: <p>// pokud v GETu existuje mesic ci rok, tak &quot;aktualni&quot; mesic a rok je ten z URL
13: if ($_GET[&quot;year&quot;]) $year = (int) $_GET[&quot;year&quot;];
14: if ($_GET[&quot;month&quot;]) $month = (int) $_GET[&quot;month&quot;];</p>
15: <p>// pro dalsi zobrazeni potrebujeme prvni den v mesici, pocet dni v mesici ...
16: $first_day = mktime(0,0,0,$month, 1, $year);
17: $title = date('n', $first_day);
18: $day_of_week = date('D', $first_day);
19: $days_in_month = date('t', $first_day);</p>
20: <p>// ceske mesice
21: $cz_months = array(
22: 1 =?&gt;
23: &quot;Leden&quot;, &quot;Únor&quot;, &quot;Březen&quot;, &quot;Duben&quot;, &quot;Květen&quot;, &quot;Červen&quot;, &quot;Červenec&quot;, &quot;Srpen&quot;, &quot;Září&quot;, &quot;Říjen&quot;, &quot;Listopad&quot;, &quot;Prosinec&quot; ); $prevY = $nextY = $year; $prevM = $nextM = $month; // nastaveni odkazu pro predchozi a nasledujici mesic / rok if ($month - 1 12){ $nextM = 1; $nextY++;} else {$nextM = $month + 1;}; $prev = &quot;<a href="?month=&quot;.($prevM).&quot;&amp;year=&quot;.($prevY).&quot;">&quot;; $next = &quot;</a> <a href="?month=&quot;.($nextM).&quot;&amp;year=&quot;.($nextY).&quot;">&gt;&gt;</a>&quot;; // timto si vyplnime v kalendari prazdne bunky, 1 den v mesici a prvniho neni vzdy pondeli ... $emptyTD = array(&quot;Mon&quot; =&gt; 0, &quot;Tue&quot; =&gt; 1, &quot;Wed&quot; =&gt; 2, &quot;Thu&quot; =&gt; 3, &quot;Fri&quot; =&gt; 4, &quot;Sat&quot; =&gt; 5, &quot;Sun&quot; =&gt; 6); $blank = $emptyTD[$day_of_week]; // vykresleni kalendare echo &quot;</p>
24: <table align="center" border="1" id="calendar">"; echo "<tr><th>$prev</th><th colspan="5"> ".$cz_months[$title]." $year</th><th>$next</th></tr>"; echo "<tr><td width="42">M</td><td width="42">T</td><td width="42">W</td><td width="42">T</td><td width="42">F</td><td width="42">S</td><td width="42">S</td></tr>"; $day_count = 1; echo "<tr>"; // zde prave zjistime pocet prazdnych bunek pred 1 dnem v mesici while ( $blank > 0 ) { echo "<td></td>"; $blank--; $day_count++; } $day_num = 1; // veskere dny v kalendari while ($day_num **[$day_num](?year=$year&month=$month&day=$day_num)**"; } else { echo "<td class="days">[$day_num](?year=$year&month=$month&day=$day_num)</td>"; } } else { echo "<td class="days">$day_num</td>"; } $day_num++; $day_count++; if ($day_count > 7) { echo "</tr><tr>"; $day_count = 1; } } // timto zajistime spravne zobrazeni kalendare a dopocitani prazdnych bunek while ($day_count >1 && $day_count "; $day_count++; } echo "</tr></table>"; ?>
[link]kalendar.zip[/link]

Kategorie

  • Osobní názory - 0x
  • PHP - 9x
  • MYSQL - 4x
  • CSS - 7x
  • jQuery - 3x
  • Sociální síť - 1x
  • Nette - 5x
  • Tipy & triky - 3x
  • Twitter Bootstrap - 1x
  • Týdenní tipy a novinky - 4x
  • SCSS - 1x
  • GIT - 1x
  • Gulp - 1x

  • Komentáře (39x)

    No já tedy nevím, ale mě se zdá, ukazuje nějak divně né? A jak se nastavuje startday - jsme v čechách... :-(
    #2 reagovat Roman Janko:
    [1] Pavel Kraus Co se ti ukazuje divne? Jinak zahlavi dnu , na to staci jednoduche pole ne?
    Velice dobrý a funkční příklad - mám ještě dotaz, jak by se to dalo udělat, že bych si u vybraných dní mohl změnit jednoduše barvu pozadí k danému dni a např. udělat i z čísla odkaz. _ poradíš? Díky
    #4 reagovat Roman Janko:
    [3] Ross Velmi jednodusse, vecer priklad rozsirim
    Pěkné, a co kdyby měsíce byly česky? Tu část s odkazy na jednotlivé dny bych taky potřeboval :P Díky
    #6 reagovat Roman Janko:
    Kód upraven (pouze v prikladu, ne v souboru kalendar.zip )
    #7 reagovat Jane:
    Ahoj, tak se si tento kalendář stáhla, ale nezobrazí se mi.. Nevim, v čem je chyba... Poradíte pls?? Dělám to v programu Evrsoft First Page 3.0
    #8 reagovat Roman Janko:
    [7] Jane Tady je asi kazda rada zbytecna ... Je nutne si uvedomit ze to je dynamicky kod, bez podpory PHP a APACHE to nespustite. Prectete si o tom neco na http://linuxsoft.cz/php
    #9 reagovat Aleš:
    Ahoj, není mě jasný význam proměnných $selected_days, může mi to někdo vysvětlit? Díky
    #10 reagovat Aleš:
    [9] Aleš tak už nic :-)
    #11 reagovat j.ree:
    je to sice pekny skript, ale docela mi tam vadi, ze nemas osetreny fakt, ze aktualni datum se zvyraznuje jak v budoucich tak i v minulych mesicich. Cize, dneska je 27.4., zvyrazneno budu mit i 27.5, 27.3 apod ... :)
    #12 reagovat Roman Janko:
    [11] j.ree To se da lehce opravit :]
    #13 reagovat j.ree:
    [12] Roman Janko Vsak jsem si to taky opravil, stacila jedna podminka navic :)
    Ahoj,mám takovej blbej dotaz..trochu se tu orientuju v tom kódě, ale některý věci mi pořád nejsou tak úplně jasný. Nemáš k tomu přesnější popisek? Trochu v tom plavu a newim co je co :D jinak obdivuju samozrejme ;)dyžtak mi písni na maila=)
    Děkuju na stotisíckrát, po pár úpravách se jedná o velmi povedený kalendář
    [15] er No dík :)
    Ddal bych tam isset($_GET["year"]) a pod tim isset($_GET["mounth"]) ... když nebudou existovat, PHP by hodilo error.
    [17] Drahomír Hanák Ano, ale je to pouze notice, na produkčním vyplé povětšinou. Navíc tento skript je staršího data a rozhodně není ideální a to ani nikde netvrdím. Je to pouze jakýsi nástin, jako ostatně všechno, nikoliv pro rozené "pastery" ctr+c -> ctr+v
    #19 reagovat David Tomek:
    poradí někdo jak zvýraznit aktuální den??? nwm jak na to Kdyžtak mi pošlete ten script. Děkuji předem
    #20 reagovat Vasek:
    Čau. Koukal jsem na vygenerovaný kod a na konci to vzdy generuje navic . Coz neni validni ale jinak je to ok :)
    #21 reagovat Vasek:
    jedno otevřený a uzavreny trko
    #22 reagovat ¨RJ:
    [21] Vasek Oprav a uverejnim nebo si casem udelam cas :) Validita není nic
    #23 reagovat Vašek:
    Tak už jsem na to přišel. Chceš to poslat na mail? Sem totiž nejdou vkladat některý znaky.
    Nejde mi TO stiahnuť...
    NO, skutočne to nejde stiahnuť. A skopírovaný kód z príkladu nie je ošetrený napr. tým, že každý mesiac označuje aktuálny deň...
    Not Found! I přesto se s tím dají dělat blbiny a funkční, stačí si lehce pohrát: http://www.zbelitovsko.cz/zbemeteo.php Romane díky za inspiraci, ještě to šlechtím...
    ahojte neviem či je to tu zive este avsak chcel by som sa opytat na moznost zvyraznenia dna ktory je a nasledne zvyraznenia stlpca vikendu.
    Zdravím, pouzil jsem Vas kalendar, ale nezobrazuje se mi tam aktualni datum, vyresil to uz nekdo nejak? Kdyztak poslete reseni na mail prosim, dekuju :-)
    #30 reagovat Tom:
    [27] Tom Vzhledem k tomu, že na tenhle odkaz čučí docela dost lidí, ještě jsem to vylepšil. Případné dotazy pište na kontakt na stránkách.
    [27] Tom Ještě jedno vylepšení - kalendář akcí - může se někomu hodit - najdete na hlavní stránce www.zbelitovsko.cz Případným zájemcům můžu poslat kód, grafiku i "databázi" svátků ;-)
    Ahoj Tom, vyzerá to dobre. Mohol by si mi to prosim poslat na strakaster@gmail.com ?
    Ahoj Tome, taktéž bych požádal o zaslání Tvého vyladěného kódu na radekstastny[zavinac]centrum.cz ;-) Děkuji!
    Ahoj Tome, taky čučím na Tvé stránky a líbí se. Mohl bych taktéž poprosit o kód na kalendář? Díky
    Zdravim, chcel by som sa spýtať ako by som zmenil ručne dosadzovanie dátumov na automaticke dosadzovanie datumov s databáze. Velmy by mi to pomohlo. Dík.
    #36 reagovat RomanJanko:
    [35] GetroXer Ahoj, jednodušše. Uložíš si pole v tom formátu v jakém jej to vyžaduje tj. while(...){ $data[$rok][$mesic][$den] = TRUE; }
    #37 reagovat zidannn:
    škola
    #38 reagovat zidannn 2:
    [37] zidannn taky škola
    #39 reagovat Roman Janko:
    [38] zidannn 2 Prosím?

    Vložit nový komentář


    • na jiné komentáře odkazujte pomocí odkazu reagovat
    • vaše IP adresa bude zaznamenána
    • používají se gravatary
    • můžeme si tykat
    • HTML tagy vypnuty. PHP kód se také neprovede. Pokud potřebuju přiložit ukázku vašeho kódu, použijete službu pastebin
    • vulgární, rasistické či jinak nepřípustné komentáře budou smazány