86 Kezdőlap - Webszerkesztés - PHP - Dátum- és időkezelés

Dátum- és időkezelés

A PHP date() függvénye

Jegyzet

A dátumokhoz és a időpontokhoz köthető feladatok a programozás során jellemzően nem merülnek ki annyiban, hogy megjelenítjük egy weblapon az aktuális napot, vagy épp bármilyen célból is készítünk egy működő órát. Sokszor az időpontok feltüntetésének, vagy épp eltárolásának az a feladata, hogy és még hosszan sorolhatánk a hasonló feladatokat.

A PHP-ban ezen feladatok megoldására leggyakrabban a date() függvényt használjuk. A függvény ismertetése a PHP nyelv dokumentációjában az alábbi linken érhető el: A folytatásban nézzünk meg néhány példát az alkalmazásra.

1.
Elsőként jelenítsük meg a dátumot és pontos időt év.hónap.nap óra:perc:másodperc formátumban. A PHP Manualban jelzett formátumkarakterek alklamazásával ez az alábbi forráskód eredményeként lehetséges:

    <?
	print date("Y.m.d H:i:s");
    ?>
	
A kód eredménye tehát:

	2019.10.15 01:48:42
	
Ez nem egy működő óra. Ez egy időbélyeg - ami azt jelenti, hogy kiirattuk a kiiratás pillanatában érvényes időt, ha úgy tetszik: az oldal letöltésének időpontját. Működő órát megvalósítani JavaScript nyelven célszerű.

2.
Következőként irassuk ki, hogy a jelenlegi hét hányadik hete az évnek. A PHP Manual szerint ez a "W" formátumkarakterrel lehetséges, tehát a számunkra szükséges forráskód:

    <?
	print "A jelenlegi hét az év " . date("W.") . " hete." ;
    ?>
	
A forráskód eredménye pedig:

	A jelenlegi hét az év 42. hete.
	
A példából jól látható, hogy a date() függvény használata értelemszerűen belefoglalható bármilyen szövegkörnyezetbe is.

3.
Nézzük meg a mai dátum kiíratását egy picit cizelláltabb módon. A hónap nevét magyarul irassuk ki, és a dátum mellett szerepeljen az is, hogy milyen nap van ma - magyarul. Ehhez szükséges lehet, hogy hozzuk létre a hónapok nevét tartalmazó tömböt, illetve a napok nevét tartalmazó tömböt, majd pedig használjuk belőlük a megfelelő sorszámú tömbelemeket.

    <?
	$honapok = Array( "", "január" , "február"  , "március"   ,
	                      "április", "május"    , "június"    ,
	                      "július" , "augusztus", "szeptember",
	                      "október", "november" , "december"    );

	$napok   = Array( "vasárnap" , "hétfő" , "kedd",  "szerda",
	                  "csütörtök", "péntek", "szombat"          );

	$ho   =  $honapok[date("n")];
	$nap  =  $napok[date("w")];

	print "Ma " . date("Y. ") . $ho . date(" d.") . ", $nap van.";
    ?>
	
A program által megjelenített szöveg:

    	Ma 2019. október 15., kedd van.
	
Fontos, hogy a hónap nevének meghatározásakor most az "n" formátumkaraktert használtuk, és nem pedig az "m"-et. Utóbbi ugyanis két számjegyen adná vissza a hónap sorszámát, mellyel szeptemberig (vagyis a 9. hónapig) a tömbelem-sorszámban a vezető nulla miatt értelmezhetetlenné válna a program $ho változót meghatározó sora.

4.
Adott az alábbi két kép.

Oldjuk meg, hogy a két kép közül nyári időszámítás esetén a nyári, téli időszámítás esetén pedig a téli képet ábrázoló óra jelenjen meg egy adott helyen!

Ehhez a date() függvény "I" formátumkarakterét kell alkalmazni paraméterként, mely igaz értéket ad vissza nyári időszámítás esetén, egyébként pedig hamisat.

    <?
	if( date("I") ) print "<img src='nyari_ora.png'>" ;
	else            print "<img src= 'teli_ora.png'>" ;
    ?>
	
Az óraállításnak megfelelően most ezt kell látnunk:

	
	

5.
Mondjuk meg, mennyi az idő most New Yorkban!

Az időzónák kezelése a date_default_timezone_set()  függvénnyel lehetséges. A szükséges programkód tehát:

    <?
        date_default_timezone_set('America/New_York');

        print "New Yorkban a pontos idő most " . 
                       date("G") . " óra " . date("i") . " perc." ;

        date_default_timezone_set('Europe/Budapest');
    ?>
	
A kód eredménye:

	New Yorkban a pontos idő most 19 óra 48 perc.
	
Ne felejtsük el a programrészlet végén az időzónát visszaállítani a magyarországi időre!

6.
Határozzuk meg, hányadika lesz 100 nap múlva!

Újdonságként szükségünk lesz a time()  függvényre, mely az 1970. január 1. éjfél óta eltelt másodpercek számát adja vissza, illetve ekként jelent jó viszonyítási alapot korábbi, illetve későbbi időpontokra vonatkozó számolásokhoz. Adjunk hozzá tehát a jelenlegi értékéhez 100 napot (100*24óra*60perc*60másodpercet), majd tudjuk meg a date() függvénnyel az akkori dátumot:

    <?
        $szaznapmulva = time() + 100*24*60*60;
        print "100 nap múlva ".date("Y.m.d.", $szaznapmulva)." lesz." ;
    ?>
	
Ezek szerint:

	100 nap múlva 2020.01.23. lesz.
	
E példában most használtuk a date() függvény második paraméterét is (itt szerepel a $szaznapmulva), melyre akkor van szükség, ha épp nem az aktuális napot/időt szeretnénk vizsgálni.

7.
Adjuk meg, hogy a mai nap hányadik napja a XXI. évszázadnak!

A feladat megoldásához dámutot kell "csinálnunk" 2000. december 31-ből, mint az előző évszázad utolsó napjából, majd ezt követően meg kell mondanunk, éppen ma hányadik nap zajlik azóta. Dátum létrehozásához a mktime()  függvényt használhatjuk. Ennek eredményét - mely a time() függvényhez hasonlóan szintén az 1970. január 1. éjfél óta eltelt másodpercek számát adja vissza - kell kivonnunk a pillanatnyi állapotból, és a különbséget elosztani a napi másodpercek számával, végül pedig egésszé alakítani a hányadost:

    <?
        $evszazadkezdet = mktime(0, 0, 0, 12, 31, 2000);
        $evszazadnapok  = (int)((time() - $evszazadkezdet) / (24*60*60));

        print "A mai nap a XXI. évszázad $evszazadnapok. napja.";
    ?>
	
Rövidke programunk válasza:

	A mai nap a XXI. évszázad 6862. napja.
	
Elgondolkodtató lehet, hogy miért nem az 1999. december 31. napot tekintjük az előző évszázad utolsó napjának. A válasz egyszerű: egy évszázad 100 évig tart. Tehát az első évszázad a 100. év végén ért véget, így a II. évszázad a 101. évvel kezdődött. E szerint 200-ban, az év végén ért véget. Majd a következő évszázadok rendre a 300., 400., 500., ..., 1800., 1900., és 2000. évvel zárulnak.
Még könnyebb belátni a dolgot, ha évezredekben gondolkodunk: egy évezred 1000 évig tart. Tehát az 1. évezred az 1000. év végén ért véget, így a 2. évezred az 1001. évvel kezdődött. Ennek megfelelően 2000-ben, az év végén ért véget - nyilvánvalóan azon a napon, amikor a XX. század is véget ért.
A PHP 5.3 verziójától létezik a date_diff()  függvény is, mely értelemszerűen szintén használható két dátum különbségének meghatározására. Érdemes ennek is utánanézni.

Feladat

Készítsen weboldalt, mely kiírja az alábbi kérdésekre a választ!
  1. Hányadik napja van ma a hétnek?
  2. Hány napos a jelenlegi hónap?
  3. Hány nap van még hátra ebből az évből?
  4. Milyen napra esik idén Szilveszter?
  5. Jövőre hány napos lesz a február?
  6. Mikor született az, akinek a mai nap élete 6666. napja?
  7. Ön hány napja született?
Oldja meg, hogy a fenti kérdéseket megválaszoló weblap valamely sarkában egy dekoráló kép legyen látható. Ez a kép mindig az adott évszaknak megfelelő legyen, bármikor is tekintik meg a weboldalt. Például: jelenjen meg a honlapon.


2019-10-15 01:48:42 Admin Köszönöm, ha Ön lesz az első, aki megírja ide véleményét, észrevételét, kérdését ezzel a lappal kapcsolatban.




Új hozzászólás:
E-mail cím:


Erre a címre küldjük ki a hozzászólás jóvá- hagyásához szükséges linket. Az e-mail címet sehol nem tesszük közzé.

Név:


Ez a név fog megjelenni az Ön hozzászólásai mellett.

Mennyi tizennégy + kilenc?
Számjegyekkel írja be!



Ez a robotok beírása elleni védelem miatt szükséges ellenőrzés.


© infojegyzet.hu, 2007. május