Dátumok kezelése

A dátumok annyira mindennapjaink részét képezik, hogy nem is gondolkodunk,
amikor velük dolgozunk, naptárunk fortélyainak helyes kezelése azonban a programokat
meglehetõsen bonyolulttá teheti. Szerencsére a PHP hatékony eszközöket
biztosít a dátumszámításhoz, amely megkönnyíti a feladatot.
Ebben a fejezetben a következõkrõl tanulunk:
• Hogyan kérdezhetjük le a pontos idõt és dátumot?
• Hogyan szerezhetünk információt egy dátumról?
• Hogyan formázzunk meg egy dátumot?
• Hogyan ellenõrizzük a dátumok érvényességét?
• Hogyan állítsuk be a dátumot?
• Hogyan írjunk egyszerû naptárprogramot?
A dátum kiderítése a time() függvénnyel
A PHP time() függvénye mindent elárul, amire szükségünk lehet a pontos
idõvel és dátummal kapcsolatban. A függvénynek nincs bemenete (paramétere) és
egy egész számot ad vissza, amely egy kicsit nehezen értelmezhetõ, viszont
nagyon informatív.
A time() által visszaadott egész szám a greenwichi középidõ szerinti 1970. január 1.
éjfél óta eltelt másodpercek számát adja meg. Ez a dátum a „UNIX kor kezdete”
néven ismeretes, az azóta eltelt másodpercek számát pedig idõbélyegnek (néha idõ-
bélyegzõ, time stamp) nevezik. Az idõbélyeget a PHP eszközeivel „emberi fogyaszt
ásra alkalmasabb” formára hozhatjuk, de felmerül a kérdés: még ha ilyen nagyszerû
eszközök is állnak rendelkezésünkre, az idõbélyeg nem feleslegesen túlbonyolított
módja a dátum tárolásának? Nem, éppen ellenkezõleg: egyetlen számból rengeteg
információt szerezhetünk. És ami még ennél is jobb, az idõbélyeggel sokkalta
könnyebben lehet számításokat végezni, mint azt gondolnánk.
Képzeljünk csak el egy házi dátumrendszert, amelyben az éveket, hónapokat és
a hónapok napjait jegyezzük fel. Most képzeljünk el egy olyan programot, amellyel
egy napot kell hozzáadnunk egy adott dátumhoz. Ha ez a dátum éppenséggel
1999. december 31., akkor ahelyett, hogy 1-et adnánk a dátumhoz, olyan programot
kellene írni, amely a napot 1-re írná át, a hónapot januárra, az évet pedig 2000-re.
Az idõbélyegben viszont csak egy napnyi másodpercet kell hozzáadni az aktuális
dátumhoz és már készen is vagyunk. Ezt az új számot pedig kedvünk szerint alakíthatjuk
át valamilyen barátságosabb formára.
Az idõbélyeg átalakítása a getdate() függvénnyel
Most, hogy rendelkezésünkre áll az idõbélyeg, át kell alakítanunk, mielõtt megmutatn
ánk a felhasználónak. A getdate() elhagyható bemenete egy idõbélyeg, visszaté-
rési értéke pedig egy asszociatív tömb. Ha nem adjuk meg az idõbélyeget, a függv
ény az éppen aktuális idõbélyeggel dolgozik, mintha azt a time() függvénytõl
kapta volna. A 15.1. táblázat a getdate() által visszaadott tömb elemeit részletezi.
15.1. táblázat A getdate() függvény által visszaadott asszociatív tömb
Kulcs Leírás Példa
seconds A percbõl eltelt másodpercek száma (0-59) 28
minutes Az órából eltelt percek száma (0-59) 7
hours A nap órája (0-23) 12
mday A hónap napja (1-31) 20
284 15. óra
15.1. táblázat (folytatás)
wday A hét napja (0-6) 4
mon Az év hónapja (1-12) 1
year Év (négy számjeggyel) 2000
yday Az év napja (0-365) 19
weekday A hét napja (névvel) Thursday
month Az év hónapja (névvel) January
0 Az idõbélyeg 948370048
A 15.1. programban a getdate() függvénnyel szétbontjuk az idõbélyeget, majd
a foreach utasítással kiírjuk az egyes elemeket. A 15.1. ábrán a getdate() függv
ény egy lehetséges kimenetét láthatjuk. A getdate() a helyi idõzóna szerinti dá-
tumot adja vissza.
15.1. program Dátum lekérdezése a getdate() függvénnyel
1:
2:
3: 15.1. program Dátum lekérdezése a getdate()<br />függvénnyel
4:
5:
6: 7: $datum_tomb = getdate(); // nem adtunk meg bemenetet,
így a mai dátumot fogja visszaadni
8: foreach ( $datum_tomb as $kulcs => $ertek )
9: {
10: print "$kulcs = $ertek
";
11: }
12: ?>
13:



14: 15: print "A mai dátum: " $datum_tomb["year"] "
" $datum_tomb["mon"] "
" $datum_tomb["mday"]

";
16: ?>
17:
18:
Dátumok kezelése 285
15
Az idõbélyeg átalakítása a date() függvénnyel
A getdate() függvényt akkor használjuk, amikor a kimenetét képezõ elemeket
szeretnénk használni, a dátumot azonban általában szövegként szeretnénk megjelen
íteni. A date() függvény a dátumot formázott karakterlánc formájában adja
vissza. A date() függvény által visszaadott érték formátuma a paraméterként
átadható formázó karakterlánccal nagymértékben befolyásolható. A formázó karakterl
áncon kívül a date() függvénynek átadhatjuk az idõbélyeget is, bár ez nem
kötelezõ. A 15.2. táblázatban láthatjuk azokat a kódokat, amelyeket a formázó karakterl
ánc tartalmazhat. A date() függvénynek átadott formázóban található minden
egyéb szöveg a visszaadott értékben változatlanul meg fog jelenni.
15.2. táblázat A date() által használt formázási kódok.
Formátum Leírás Példa
a ‘am’ (délelõtt) vagy ‘pm’ (délután), kisbetûvel pm
A ‘AM’ (délelõtt) vagy ‘PM’ (délután), nagybetûvel PM
d A hónap napja (bevezetõ nullákkal írt szám) 05
D A hét napja (három betûvel) Thu
F A hónap neve January
h Óra (12 órás formátum, bevezetõ nullákkal) 03
H Óra (24 órás formátum, bevezetõ nullákkal) 05
g Óra (12 órás formátum, bevezetõ nullák nélkül) 3
G Óra (24 órás formátum, bevezetõ nullák nélkül) 5
286 15. óra
15.1. ábra
A getdate() függvény
használata
15.2. táblázat (folytatás)
Formátum Leírás Példa
i Perc 47
j A hónap napja (bevezetõ nullák nélkül) 5
l A hét napja (névvel) Thursday
L Szökõév (‘1’ ha igen, ‘0’ ha nem) 1
m Az év hónapja (számmal, bevezetõ nullákkal) 01
M Az év hónapja (három betûvel) Jan
n Az év hónapja (számmal, bevezetõ nullák nélkül) 1
s Az óra percei 24
U Idõbélyeg 948372444
y Év (két számjegy) 00
Y Év (négy számjegy) 2000
z Az év napja (0-365) 19
Z A greenwichi középidõtõl való eltérés másodpercben 0
A 15.2. program néhány formátumkódot mutat be.
15.2. program Dátum formázása a date() függvénnyel
1:
2:
3: 15.2. program Dátum formázása a date()<br />függvénnyel
4:
5:
6: 7: print date("Y.m.d. H:i:s
", time());
8: // 2000.12.10. 14:42:55
9:
10: $de_du = Array ("am" => "délelõtt", "pm"
=> "délután");
11: $honapok = Array("január", "február", "március",
"április",
12: "május", "június", "július", "augusztus",
"szeptember",
13: "október", "november", "december");
Dátumok kezelése 287
15
15.2. program (folytatás)
14:
15: $napszak = $de_du[date("a")];
16: $honap = $honapok[date("n")-1];
17:
18: print " Ma " . date("Y ") . $honap .
date(" j. \\n\ap\j\a v\a\\n, " );
19: print $napszak . date(" g ór\a i perc");
20: // Ma 2000 december tizedike van,
délután 2 óra 42 perc.
21: ?>
22:
23:
A magyar dátumok formázása kétségtelenül bonyolultabb, mint a belsõleg támogatott
angol dátumformátumok, ezért létre kell hoznunk egy tömböt, amely
a „délelõtt” és „délután” szavakat tartalmazza, valamint egy másik tömböt
a hónapok nevei számára. A $napszak egyszerûen a date() függvény "a"
formátumra adott kimenetébõl származtatható, a $honap-hoz pedig a tömb
date("n")-1-edik elemét kell vennünk, mivel a tömbök nullától számozódnak.
Bár a formázás bonyolultnak tûnik, nagyon könnyû elvégezni. Ha olyan szöveget
szeretnénk a formázáshoz adni, amely formátumkód-betûket tartalmaz, a fordított
perjel (\) karakterrel jelezhetjük, hogy az utána jövõ karakter nem formátumkód.
Azon karakterek esetében, amelyek a \ után válnak vezérlõkarakterré, ezt a \ elé
tett újabb \ segítségével kell jeleznünk. A "\n"-t például ennek megfelelõen
"\\n"-nek kell írnunk, ha egy “n”-t szeretnénk a formázási karaktersorozatba
írni. A fenti példában a formátumkarakterek ütközését elkerülendõ vettük külön
a $honap és $napszak kiírását, hogy a date() függvény ne tekintse ezek
karaktereit értelmezendõ formátum-meghatározásoknak. A date() függvény
a helyi idõzóna szerint adja vissza a dátumot. Ha azt szeretnénk, hogy greenwichi
középidõ (Greenwich Mean Time, GMT) szerint kapjuk meg, használjuk
a gmdate() függvényt, amely egyébként minden más tekintetben ugyanígy
mûködik.
Idõbélyeg készítése az mktime() függvénnyel
Már képesek vagyunk az aktuális dátumot használni, de tetszõleges dátumokat
még nem tudunk kezelni. Az mktime() függvény által visszaadott idõbélyeget
a date() vagy a getdate() függvényekkel használhatjuk. Az mktime()
függvény bemenete hat egész szám, a következõ sorrendben:
288 15. óra
óra
perc
másodperc
hónap
hónap napja
év
A 15.3. program az mktime() függvénnyel állít elõ idõbélyeget, amit aztán
a date() függvénnyel használ.
15.3. program Idõbélyeg készítése az mktime() függvénnyel
1:
2:
3: 15.3. program Idõbélyeg készítése az mktime()<br />függvénnyel
4:
5:
6: 7: // idõbélyeget készít 1999. 05. 01. 12 óra 30 perchez
8: $ido = mktime( 12, 30, 0, 5, 1, 1999 );
9: print date("Y.m.d. H:i:s
", $ido);
10: // 1999.05.01. 12:30:00
11: ?>
12:
13:
Az mktime() függvény néhány vagy akár az összes eleme elhagyható, ilyenkor
az aktuális idõnek megfelelõ értékeket használja. Az mktime() emellett azokat
az értékeket is kiigazítja, amelyek túl vannak a megfelelõ értéktartományon,
így ha 25-öt adunk meg óra paraméterként, akkor a meghatározott nap, hónap,
év paraméterek utáni nap reggeli 1.00-ként fogja kezelni azt. Az mktime()
függvény kimenete általában adatbázisban vagy fájlban való tároláshoz, illetve
dátumszámításokhoz lehet hasznos.
A dátum ellenõrzése a checkdate() függvénnyel
Elõfordulhat, hogy a felhasználó által bevitt dátummal kell dolgoznunk. Mielõtt
nekikezdenénk a munkának vagy tárolnánk a dátumot, meg kell bizonyosodnunk
róla, hogy az érvényes-e. A checkdate() függvény három egész számot,
a hónapot, a napot, és az évet kéri paraméterként (ebben a sorrendben) és true
(igaz) értéket ad vissza, ha a hónap 1 és 12 közt van, a nap elfogadható az adott
Dátumok kezelése 289
15
hónapban és évben (számításba véve a szökõéveket) és az év 0 és 32 767 közé
esik. Vigyázzunk azonban, mert elõfordulhat, hogy egy dátum ugyan érvényes, de
más dátumfüggvények számára mégsem elfogadható. Például a következõ sor
true (igaz) értéket ad vissza:
checkdate( 4, 4, 1066 )
Viszont ha ezekkel az értékekkel egy dátumot szeretnénk létrehozni, az mktime()
által visszaadott idõbélyeg –1 lenne. Általános szabályként fogadjuk el, hogy
az 1902 elõtti évekre nem használjuk az mktime() függvényt és az 1970 elõttiekre
is csak elõvigyázatosan.
Egy példa
Próbáljunk meg ezen függvények közül egyetlen példán belül minél többet
használni. Készítsünk naptárat, amely egy 1980 és 2010 közötti tetszõleges hónap
napjait mutatja. A felhasználó lenyíló menüvel választhatja ki a hónapot és az évet.
A program kimenetében az adott hónap dátumai a hét napjainak megfelelõen ker
ülnek elrendezésre. Két globális változót használunk, a $honap és az $ev változ
ókat, melyek adatait a felhasználó adja meg. A két változó segítségével elkészítj
ük a meghatározott hónap elsõ napjának idõbélyegét. Ha nem adtuk meg az évet
vagy a hónapot, vagy megadtuk, de a bevitt adat nem érvényes, a program bemenet
ének alapbeállításként a folyó év aktuális hónapjának elsõ napját tekintjük.
A felhasználó által bevitt adatok ellenõrzése
Amikor egy felhasználó elõször látogat el weboldalunkra, valószínûleg nem fogja
megadni a bekért adatokat. Erre az isset() függvény segítségével készíthetjük
fel programunkat. Ez a függvény a false (hamis) értéket adja vissza, ha a neki
átadott változó nem meghatározott. (Használhatjuk helyette a checkdate()
függvényt is.) A 15.4. példa azt a kódrészletet tartalmazza, amely ellenõrzi
a $honap és az $ev változókat és egy idõbélyeget hoz létre belõlük.
15.4. program A felhasználó által bevitt adatok ellenõrzése
a naptárprogram számára
1: 2: if ( ! checkdate( $honap, 1, $ev ) )
3: {
4: $mostTomb = getdate();
5: $honap = $mostTomb["mon"];
6: $ev = $mostTomb["year"];
7: }
290 15. óra
15.4. program (folytatás)
8: $kezdet = mktime ( 0, 0, 0, $honap, 1, $ev );
9: $elsoNapTombje = getdate($kezdet);
10: if ($elsoNapTombje["wday"] == 0)
{ $elsoNapTombje["wday"] = 6; }
11: else { $elsoNapTombje["wday"]--; }
12: ?>
A 15.4. program egy nagyobb program részlete, így önmagában nincs kimenete.
Az if utasításban a checkdate() függvényt használjuk a $honap és az $ev
változók ellenõrzésére. Ha ezek nem meghatározottak, a checkdate() false
(hamis) értéket ad vissza, mivel nem hozhatunk létre érvényes dátumot meghatá-
rozatlan hónap és év paraméterekbõl. E megközelítés további haszna, hogy
egyúttal a felhasználó által bevitt adat érvényességét is ellenõrizzük.
Ha a dátum nem érvényes, a getdate() függvénnyel létrehozunk egy, az aktu-
ális dátumon alapuló asszociatív tömböt. Ezután a tömb mon és year elemeivel
magunk állítjuk be a $honap és az $ev változók értékeit.
Most hogy megbizonyosodtunk, hogy a program bemenetét képezõ két változó érv
ényes adatot tartalmaz, az mktime() függvényt használjuk a hónap elsõ napja
idõbélyegének létrehozására. A késõbbiek során még szükségünk lesz ennek
az idõbélyegnek a napjára és hónapjára, ezért létrehozunk egy $elsoNapTombje
nevû változót, amely a getdate() függvény által visszaadott és ezen az idõbélyegen
alapuló asszociatív tömb lesz. Végül a magyar héthasználatnak megfelelõen
át kell alakítanunk a hét napjára vonatkozó értéket. A getdate() és más dátumf
üggvények a hét elsõ napjának a vasárnapot tekintik. Ezért ha a hét elsõ napján
vagyunk (ez kapja a nullás számot), akkor hetedikre írjuk át, egyébként pedig
a nap számát eggyel csökkentjük. Így a vasárnap a hét végére kerül, a többi nap
pedig eggyel elõrébb, azaz a hétfõ az elsõ helyen szerepel.
A HTML ûrlap létrehozása
Olyan kezelõfelületet kell létrehoznunk, amellyel a felhasználók lekérdezhetik
egy hónap és év adatait. Ennek érdekében SELECT elemeket fogunk használni.
Bár ezeket módosíthatatlan elemekként, a HTML kódban is megadhatnánk,
azt is biztosítanunk kell, hogy a lenyíló menük alapbeállítása az adott hónap
legyen, ezért a menüket dinamikusan hozzuk létre és csak ott adjuk hozzá
a SELECTED tulajdonságot az OPTION elemhez, ahol szükséges. A 15.5. programban
a létrehozott ûrlapot láthatjuk.
Dátumok kezelése 291
15
15.5. program A naptárprogram HTML ûrlapja
1: 2: if ( ! checkdate( $honap, 1, $ev ) )
3: {
4: $mostTomb = getdate();
5: $honap = $mostTomb["mon"];
6: $ev = $mostTomb["year"];
7: }
8: $kezdet = mktime ( 0, 0, 0, $honap, 1, $ev );
9: $elsoNapTombje = getdate($kezdet);
10: if ($elsoNapTombje["wday"] == 0)
{ $elsoNapTombje["wday"] = 6; }
11: else { $elsoNapTombje["wday"]--; }
12: ?>
13:
14:
15: <?php print "Naptár:" $elsoNapTombje["year"]<br />16: $elsoNapTombje["month"] ?>
17:
18:
19:


20:
33:
43:
44:

45:
46:
Miután létrehoztuk a $kezdet idõbélyeget és az $elsoNapTombje változót,
megírjuk az oldal HTML kódját. Vegyük észre, hogy az $elsoNapTombje változ
ót arra használjuk, hogy az évet és a hónapot a TITLE (cím) elemhez adhassuk.
Az elõzõ példákban a FORM elemen belüli $PHP_SELF globális változót használtuk
arra, hogy biztosítsuk, az ûrlap az elküldés után újra megjeleníti magát,
e programban viszont azt a tényt használtuk ki, hogy ha egy FORM kódból kihagyjuk
az ACTION paramétert, alapbeállítás szerint ugyanez történik. A lenyíló menük
SELECT elemének létrehozásához visszalépünk PHP módba, hogy létrehozzuk
az egyes OPTION címkéket. Elõször létrehozunk egy $honapok nevû tömböt,
amely a 12 hónap nevét tartalmazza. Ezen aztán végiglépkedünk egy ciklussal,
mindegyikbõl készítve egy OPTION címkét. Ez az egyszerû SELECT elem létrehoz
ásának túlbonyolított módja lenne, ha nem kellene közben figyelnünk az $x változ
ót (a for ciklusváltozóját). Ha az $x és a $honap megegyezik, a SELECTED
kifejezést hozzáadjuk az OPTION címkéhez, biztosítván ezzel, hogy a megfelelõ
hónap automatikusan kijelölõdik a lap betöltésekor. Hasonló módszerrel írjuk
meg az év menüjét is, végül HTML módba visszatérve létrehozzuk a Megjelenítés
gombot.
Így egy olyan ûrlapot kapunk, amely saját magának elküldi a hónap és év
paramétereket, és amelynek vagy az aktuális év és hónap, vagy pedig az elõzõleg
megadott év és hónap az alapbeállítása. A kész ûrlapot a 15.2. ábrán láthatjuk.
Dátumok kezelése 293
15
A naptár táblázatának létrehozása
Most egy táblázatot kell létrehoznunk, amit a kiválasztott hónap napjaival kell
feltöltenünk. Ezt a 15.6. példában követhetjük nyomon, amely a teljes naptárprogramot
tartalmazza.
15.6. program A teljes naptárprogram
1: 2: define("EGYNAP", (60*60*24) );
3: if ( ! checkdate( $honap, 1, $ev ) )
4: {
5: $mostTomb = getdate();
6: $honap = $mostTomb["mon"];
7: $ev = $mostTomb["year"];
8: }
9: $kezdet = mktime ( 0, 0, 0, $honap, 1, $ev );
10: $elsoNapTombje = getdate($kezdet);
11: if ($elsoNapTombje["wday"] == 0)
{ $elsoNapTombje["wday"] = 6; }
12: else { $elsoNapTombje["wday"]--; }
13: ?>
14:
15:
16: <?php print "Naptár:" $elsoNapTombje["year"]<br />17: $elsoNapTombje["month"] ?>
18:
19:
294 15. óra
15.2. ábra
A naptár ûrlapja
15.6. program (folytatás)
20:

21:
34:
44:
45:

46:


47: 48: $napok = Array ("hétfõ", "kedd", "szerda",
"csütörtök”,
49: "péntek", "szombat", "vasárnap");
50: print "

\n";
51: foreach ( $napok as $nap )
52: print "\t\n";
53: $kiirando = $kezdet;
54: for ( $szamlalo=0; $szamlalo < (6*7); $szamlalo++ )
55: {
56: $napTomb = getdate( $kiirando );
Dátumok kezelése 295
15
15.6. program (folytatás)
57: if ( (($szamlalo) % 7) == 0 )
58: {
59: if ( $napTomb["mon"] != $honap )
60: break;
61: print "\n";
62: }
63: if ( $szamlalo < $elsoNapTombje["wday"] ||
$napTomb["mon"] != $honap )
64: {
65: print "\t\n";
66: }
67: else
68: {
69: print "\t\n";
70: $kiirando += EGYNAP;
71: }
72: }
73: print "
$nap

" . $honapok[$napTomb["mon"]-1]
" $napTomb["mday"] "
";
74: ?>
75:
76:
77:
Mivel a táblázat fejlécébe a hét napjai kell, hogy kerüljenek, a programot végigléptetj
ük a napok neveinek tömbjén és mindegyiket saját cellájába írjuk. A lényeg
a program utolsó for ciklusában történik.
Megadjuk a $szamlalo változó kezdeti értékét, majd biztosítjuk, hogy a ciklus 42
ismétlés után leáll. Erre azért van szükség, hogy a dátumoknak elegendõ cellát
hozzunk létre. A ciklusban a $kiirando változót a getdate() függvénnyel
egy dátumtömbbé alakítjuk és az eredményt a $napTomb változóba tesszük.
Bár a ciklus indításakor a $kiirando változó értéke a hónap elsõ napja lesz,
az idõbélyeget a ciklus minden lefutásakor 24 órával növeljük.
A maradékos osztás segítségével megnézzük, hogy a $szamlalo változó értéke
osztható-e 7-tel. Az ehhez az if utasításhoz tartozó kódrész csak akkor fut le,
ha a $szamlalo 0 vagy a 7 többszöröse. Így eldönthetjük, hogy befejezzük-e
a ciklust vagy új sort kezdjünk.
296 15. óra
Ha látjuk, hogy még a ciklus elsõ lefutásában vagy egy cellasor végénél vagyunk,
elvégzünk még egy ellenõrzést: megvizsgáljuk, hogy a $napTomb mon (hónapsz
ám) eleme nem egyenlõ-e a $honap változóval. Ha nem egyenlõ, a ciklust befejezhetj
ük. Emlékezzünk vissza, hogy a $napTomb-ben ugyanaz az idõpont van,
mint ami a $kezdet-ben, ami viszont a hónapnak pontosan az a része, amelyet
megjelenítünk. Ha a $kezdet túljut az aktuális hónapon, a $napTomb[mon] más
számot fog tartalmazni, mint a felhasználó által megadott $honap szám. A marad
ékosztás igazolta, hogy éppen egy sor végén állunk: ha új hónapban járunk,
elhagyhatjuk a ciklust, ha viszont a sor végére értünk és még mindig ugyanabban
a hónapban vagyunk, befejezzük a sort és újat kezdünk.
A következõ if utasításban azt határozzuk meg, hogy írjunk-e szöveget a cellába.
Nem minden hónap kezdõdik hétfõvel, így könnyen meglehet, hogy egy-két üres
cellával indítunk. Emellett kevés hónap végzõdik sor végén, így az is valószínû,
hogy mielõtt lezárnánk a táblázatot, egy pár üres cellát is kell írnunk. A hónap
elsõ napjának adatait az $elsoNapTombje változóban találjuk. Ebbõl
az $elsoNapTombje["wday"] kifejezés segítségével kideríthetõ, hogy az adott
dátum hányadik nap a héten. Ha a $szamlalo kisebb, mint ez a szám, akkor
tudjuk, hogy még nem értük el azt a cellát, amelybe már írhatnánk. Ugyanezt felhaszn
álva ha a $honap változó már nem egyenlõ a $napTomb["mon"] változó-
val, tudhatjuk, hogy elértük a hónap végét (de a sor végét még nem). Mindkét
esetben egy üres cellát írunk ki a böngészõbe.
A végsõ else utasításnál jön a feladat érdekes része. Azzal már tisztában vagyunk,
hogy a kiírandó hónapban vagyunk és az aktuális nap oszlopa megegyezik
az $elsoNapTombje változóban tárolt számmal. Most kerül felhasználásra a ciklus
korábbi részében létrehozott $napTomb asszociatív tömb, valamint a hónapok
magyar neveit tartalmazó $honapok tömb, hogy kiírjuk a hónap nevét és napját
egy cellába.
Végül növeljük a $kiirando változót, amely az idõbélyeget tartalmazza. Egyszer
ûen hozzáadjuk egy nap másodperceinek számát (ezt az értéket a program elején
határoztuk meg) és már újra is kezdhetjük a ciklust a $kiirando változó egy új
értékével. A 15.3. ábrán a program egy lehetséges eredményét láthatjuk.
Dátumok kezelése 297
15
Összefoglalás
Ezen az órán megtanultuk, hogyan használjuk a time() függvényt az aktuális
idõbélyeg megszerzésére. Megtanultuk, hogyan használjuk az idõbélyegbõl
a dátum részeinek kinyerésére a getdate() függvényt és az idõbélyeget formá-
zott szöveggé alakító date() függvényt. Arról is tanultunk, hogyan hozzunk létre
idõbélyeget az mktime() függvénnyel. Megtanultuk ellenõrizni a dátum érvé-
nyességét a checkdate() függvénnyel, magyar elvárások szerint formáztunk
dátumokat, végül tanulmányoztunk egy példaprogramot, amely az említett
függvényeket alkalmazta.
Kérdések és válaszok
Vannak olyan függvények, amelyekkel a különbözõ naptárak között
váltogatni lehet?
Igen, a PHP naptárak teljes sorozatát biztosítja. Ezekrõl a hivatalos
PHP kézikönyvben olvashatunk,
a http://www.php.net/manual/ref.calendar.php címen.
298 15. óra
15.3. ábra
A naptárprogram
Mûhely
A mûhelyben kvízkérdések találhatók, melyek segítenek megszilárdítani az órában
szerzett tudást. A válaszokat az A függelékben helyeztük el.
Kvíz
1. Hogyan kapunk meg egy UNIX idõbélyeget, amely a pontos dátumot és
idõt jelöli?
2. Melyik az a függvény, amelynek bemenete egy idõbélyeg és egy, az adott
dátumot jelképezõ asszociatív tömböt ad vissza?
3. Mely függvényt használnánk a dátum formázására?
4. Hogyan kapjuk meg egy tetszõleges dátum idõbélyegét?
5. Melyik függvényt használjuk egy dátum érvényességének ellenõrzésére?
Feladatok
1. Készítsünk egy születésnapig visszaszámláló programot. Ûrlappal lehessen
megadni az év, hó és nap értékeit, kimenete pedig egy üzenet legyen, amely
közli a felhasználóval, hogy hány nap, óra, perc, másodperc van még hátra
a nagy napig.