Naprogramujte si vlastní kalendář

Datum vydání: 2011-04-23 11:20:21; aktualizováno: 2019-11-10 06:45:09

Hledáte funkci, která by určila, zda je rok přestupný či nikoli? Zde je připravena jednoduchá funkce napsaná v PHP, která vrátí True nebo False podle toho, zda je zadaný rok v parametru přestupný. Pokud znáte pak běžnou délku měsíců v roce, jste si už schopni sami naprogramovat vlastní kalendář. V dnešní době se používá tzv. gregoriánský kalednář...

Gregoriánský kalednář

Gregoriánskou reformou v roce 1582 bylo rozhodnuto, že každý rok, který bude dělitelný 4, tak bude přestupný, ale pokud půjde o staletí (ty jsou také dělitelná 4), tak naopak pouze ta staletí, která budou dělitelná 400, tak budou přestupnými roky. Dříve bylo každé staletí přestupné, nyní bylo pouze každé čtvrté staletí přestupné. Tomuto kalendáři se říká gregoriánský kalednář. Používá se dnes skoro na celém světě. V Čechách byl tento kalendář zaveden v roce 1584.

Gregoriánský kalendář se sice trochu předchází, ale toto jednoduché pravidlo s dělitelností 4 a 400 pro potřeby lidí naprosto stačí. Časem stejně bude nutné kalendář o jeden den opět upravit, a proto je určeno, že rok 4840 nebude přestupný, přestože by podle pravidla měl být. Tím se kalendář o jeden den zkrátí a další oprava bude nutná opět za hooodně dlouho. To se nás určitě týkat nebude :)

Století v gregoriánském kalednáři
tedy vypadají následovně:
RokPřestupnýDělitelnost
1900 ne není dělitelný 400
2000 ano je dělitelný 400
2100 ne není dělitelný 400
2200 ne není dělitelný 400
2300 ne není dělitelný 400
2400 ano je dělitelný 400
2500 ne není dělitelný 400
2600 ne není dělitelný 400
2700 ne není dělitelný 400
2800 ano je dělitelný 400
2900 ne není dělitelný 400
3000 ne není dělitelný 400
Roky v gregoriánském kalednáři
vypadají například takto:
RokPřestupnýDělitelnost
2010 ne není dělitelný 4
2011 ne není dělitelný 4
2012 ano je dělitelný 4
2013 ne není dělitelný 4
2014 ne není dělitelný 4
2015 ne není dělitelný 4
2016 ano je dělitelný 4
2017 ne není dělitelný 4
2018 ne není dělitelný 4
2019 ne není dělitelný 4
2020 ano je dělitelný 4

Funce pro zjištění přestupných roků

Zde je jednoduchá funkce napsaná v PHP, která vrátí True nebo False podle toho, zda je zadaný rok v parametru přestupný. Počítá se s tím, že bude zadán "rozumný rok" a nikoli nějaké záporná čísla nebo období, kdy ještě nebyl zaveden gregoriánský kalendář.

<?
# vraci True, ktyz je rok prestupny (ma 29 dnu v unoru), jinak vraci False
function IsLeapYear($Year)
{
if (($Year % 4) == 0):
if (($Year % 100) == 0):
if (($Year % 400) == 0):
return True;
else:
return False;
endif;
else:
return True;
endif;
else:
return False;
endif;
}
?>

Zjednodušeně by to šlo zapsat takto:

<?
# vraci True, ktyz je rok prestupny (ma 29 dnu v unoru), jinak vraci False
function IsLeapYear($Year)
{
if ((($Year % 4) == 0) and ((($Year % 100) != 0) or (($Year % 400) == 0)))
return True;
else
return False;
};
?>

Neboli: přestupný rok v gregoriánském kalendáři je každý čtvrtý vyjma stoletých roků nedělitelných čtyřmi sty.

Názvy měsíců a počet dnů

Zde jsou názvy měsíců a počet dnů v gregoriánském kalendáři.

"Gregoriánský" kalendář
MěsícČeskyLatinskyPočet dnů
I. leden Januaris 31
II. únor Februarius 28
III. březen Martius 31
IV. duben Aprilis 30
V. květen Maius 31
VI. červen Junius 30
VII. červenec Julius 31
VIII. srpen Augustus 31
IX. září September 30
X. říjen October 31
XI. listopad Nevember 30
XII. prosinec December 31

Tak a nyní, když už znáte běžnou délku jednotlivých mesíců a víte, které roky jsou přestupné, tnz. že únor má vyjímečně 29 dnů místo 28, tak už si můžete sednout a naprogramovat si vlastní celý kalendář.