Învăţăm PHP: Despre timp şi date


Trecem acum de la şiruri la timp şi dată. Vom începe cu o parte puţin mai teoretică. PHP, prieten cu (în timp familia de sisteme de operare) Unix, a adoptat timpul după aşa-numita Eră Unix. Ea a început la 1 ianuarie 1970 şi se numără în secunde. La începutul acestui an am avut un articol intitulat La noapte un moment istoric! La ce moment istoric se referea? În noaptea dintre 13 spre 14 februarie 2009 Era Linux a împlinit 1234567890 secunde :) .

Mai jos vedem funcţia mktime() (make time – ‘fă timpul’ după parametrii din paranteze). Ea primeşte ca parametrii orele, minutele, secundele, luna, ziua şi anul dorit. În linia 1 generăm timpul Unix pentru începutul erei Unix. Ne-am aştepta să fie 0… dar nu e. Depinde de timpul serverului faţă de GMT. La americani va da cu plus (vedeţi aici), pe când în România va da -7200. Pentru a fi exact zero, pe un server din România trebuie ţinem cont de defazajul de 2 ore: mktime (2,0,0,1,1,1970). Sau în loc de mktime() putem folosi gmmktime(), care va returna un zero curat pentru ora, minutul şi secunda zero din prima zi a primei luni din 1970. Dacă vrem să vedem momentul actual în timpul Unix putem folosi mktime() fără parametru, dar începând din PHP 5.1 se recomandă apelarea la time() (doar pentru momentul curent).

[PHP]echo ‘Era Unix avea la 1 ianuarie 1970 ‘.mktime(0,0,0,1,1,1970).’ secunde.
‘;
echo ‘Era Unix avea la 1 ianuarie 1970 exact ‘.gmmktime(0,0,0,1,1,1970).’ secunde (GMT).
‘;
echo ‘Era Linux are acum ‘.mktime().’ secunde.
‘;
echo ‘Era Linux are acum ‘.time().’ secunde.
‘;

$now=getdate();
echo ‘

Din aceasta zi au trecut:

    ‘;
    echo ‘
  • ‘.$now[„hours”].’ ore
  • ‘;
    echo ‘

  • ‘.$now[„minutes”].’ minute
  • ‘;
    echo ‘

  • ‘.$now[„seconds”].’ secunde
  • ‘;
    echo ‘

Despre ziua de astazi:

    ‘;
    echo ‘
  • ziua ‘.$now[„weekday”].’
  • ‘;
    echo ‘

  • ziua a ‘.$now[„wday”].’ din saptamana
  • ‘;
    echo ‘

  • ziua a ‘.$now[„mday”].’ din luna
  • ‘;
    echo ‘

  • ziua a ‘.$now[„yday”].’ din an
  • ‘;
    echo ‘

  • luna ‘.$now[„month”].’
  • ‘;
    echo ‘

  • anul ‘.$now[„year”].’
  • ‘;
    echo ‘

Timpul Linux:

    ‘;
    echo ‘
  • ‘.$now[0].’ secunde
  • ‘;
    echo ‘

‘;[/PHP]

Eu m-am născut, în timp Unix, la momentul 164095215. Dar cine calculează în timp Unix? Haideţi să vedem mai pe româneşte. De fapt într-o primă fază va fi mai pe… englezeşte. Ne vom folosi de funcţia getdate(). Aceasta returnează un array asociativ, cheile fiind prezentate aici. Le deduceţi şi din afişările din codul de mai sus. După cum vedeţi avem acces la ore, minute, secunde, zi, lună, an… şi la mai mult! Putem determina uşor a câta zi din an este! Sau a câta din săptămână! (Vedeţi rezultatele la codul de mai sus aici.) Aceasta ne deschide calea spre un program chiar util :) .

Să facem deci o pagină web care îi cere utilizatorului să îşi indice ziua de naştere. Vom folosi un formular simplu, cu zi, lună şi an. Dar acum, că ştim PHP, nu scriem manual toate zilele lunii, ci folosim o buclă PHP. Ce facem cu datele? După cod…

[PHP]

Indicati va rog ziua Dvs de nastere.

zi
luna
an

‘.$nastere.’ secunde.
‘;
$now=getdate($nastere);
$trad=array(„Monday”=>”luni”,”Tuesday”=>”marti”,”Wednesday”=>”miercuri”,”Thursday”=>”joi”,
„Friday”=>”vineri”,”Saturday”=>”sambata”,”Sunday”=>”duminica”);
echo ‘V-ati nascut intr-o zi de ‘.$trad[$now[„weekday”]].’.
‘;
echo ‘Adica in a ‘.$now[„yday”].’ zi din an.
‘;
}
else echo ‘

Ei, incercati sa trisati?! Nu exista aceasta data!

‘;
}
?>[/PHP]

În linia 15 verificăm dacă s-a trimis formularul. Dacă da, luăm valorile din formular şi le punem în variabile. Urmează un test: e o dată validă? Cineva poate introduce 30 februarie! Sau 31 aprilie! Date inexistente. Dacă data e validă, mergem mai departe. Creăm din datele introduse timpul Unix corespunzător datei de naştere (am aproximat ora naşterii cu 12) şi îl afişăm (aşa, de cultură generală). Apoi extragem data. Pentru ca să nu afişăm în engleză ziua din săptămână am definit un array asociativ pe post de translator. Apoi afişarea. Simplu, simplu, simplu! Vreţi să vă jucaţi cu acest cod? Mergeţi aici.

Şi pentru că deja am vorbit multe şi văzut multe, ne oprim. Dar de fapt nu am ajuns la cea mai importantă parte a capitolului. Rămâne pe materialul următor.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (2 evaluări, media: 5,00 din 5)
Loading...Loading...

2 comentarii

  1. Am observat ca te-ai axat foarte mult pe functia mktime().

    In incercarea de a traduce zilele te-ai complicat dupa parerea mea.

    Poti sa setezi cu functia locale in ce limba sa afiseze lunile si zilele.
    @setlocale(LC_TIME, ‘ro_RO.ISO8859-1’, ‘ro_RO.ISO-8859-1’, ‘ro’, ‘ro_RO’, ‘ro_RO’, ‘rom’, ‘romanian’);

    Dupa vom putea afisa o data astfel:
    echo date(‘l, j M Y’);

    Oricum, foarte bun articolul! 😀

  2. radu.capan spune:

    In structura tutorialului atentia mea nu merge pe optimizare ci pe invatarea treptata, cu notiunile pana acum insusite. Si daca anumite cai par mai lungi, eu le prefer pentru ca batucesc notiunile anterioare (in acest caz, array-urile).
    In plus setlocale() poate usor juca feste unui incepator.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *