Ora serverului PHP este actuală. PHP lucrează cu date - date DateTime mktime și altele...

JavaScript este blocat în browserul dvs. Vă rugăm să activați JavaScript pentru ca site-ul să funcționeze!

Reprezentarea datei și orei

În sistemele distribuite precum Internetul, timpul joacă un rol deosebit. Din cauza unei ușoare discrepanțe în ceasul sistemului, un jucător Forex poate pierde zeci de mii de dolari în câteva minute; sistemul de business intelligence va face o greșeală în realizarea unei previziuni; Serverele NNTP vor pierde informații importante necesare utilizatorului în timpul procesului de sincronizare etc.

PHP conține multe funcții pentru lucrul cu data și ora. Cele mai utilizate sunt:

  • timp()- returnează timpul absolut curent. Acest număr este egal cu numărul de secunde care au trecut de la miezul nopții de la 1 ianuarie 1970 (de la începutul erei UNIX).
  • getdate()- citește informații despre dată și oră. Returnează o matrice asociativă care conține informații pentru ora specificată sau curentă (în mod implicit). Matricea conține următoarele elemente:

    Exemplul 1

    Folosind getdate() $val) echo "$key = $val
    "; ecou"
    Astăzi: $d.$d.$d"; ?>

    REZULTAT EXEMPLULUI 1:

    Secunde = 21 minute = 4 ore = 12 mday = 10 wday = 4 luni = 11 year = 2005 yday = 313 weekday = joi luna = noiembrie 0 = 1131613461 Astăzi: 11/10/2005

  • Data()- formatarea datei și orei. Argumente: șir de format și timp absolut. Al doilea argument este opțional. Returnează un șir cu data dată sau curentă în formatul specificat. Șirul de format poate conține următoarele coduri:
    A
    ADesemnarea „AM” sau „PM” este inclusă
    dZiua lunii (01-31)
    DNumele prescurtat al zilei săptămânii (trei litere)
    FNumele întregii luni
    gCeas (format de 12 ore fără zerouri la început)
    GCeas (format de 24 de ore fără zerouri la început)
    hCeas (format 12 ore)
    HCeas (format de 24 de ore)
    iMinute (00-59)
    jZiua lunii fără zerouri de început (1-31)
    lNumele complet al zilei săptămânii
    LIndicator an bisect (0 sau 1)
    mLuna (01-12)
    MNumele lunii prescurtat (trei litere)
    nLuna (1-12)
    sSecunde (00-59)
    tNumărul de zile dintr-o lună dată (de la 28 la 31)
    UTimp absolut
    w
    yAnul (două trepte)
    YAnul (patru grade)
    zZiua anului (0-365)
    ZDecalaj fus orar în secunde (-43200 la 43200)

    Orice altă informație inclusă în șirul de format va fi inserată în șirul returnat. Dacă trebuie să adăugați caractere la șirul de format care sunt ele însele coduri de format, atunci acestea trebuie să fie precedate de o bară oblică inversă „\”. Caracterele care devin coduri de format atunci când sunt atașate cu o bară oblică inversă trebuie să fie precedate de două bare oblice. De exemplu, dacă trebuie să adăugați „n” la un șir, trebuie să introduceți „\\n” deoarece „\n” este un caracter newline.

    Exemplul 2

    Folosind data()

    REZULTAT EXEMPLULUI 2:

    Astăzi: 10.11.05 13:03

  • mktime()- returnează ora absolută, care poate fi apoi folosită cu funcțiile date() sau getdate(). Preia până la șase argumente întregi în următoarea ordine:

    Ceas
    minute
    secunde
    lună
    ziua lunii
    an

    Exemplul 3

    Folosind mktime()

    REZULTAT EXEMPLULUI 3:

  • data de verificare()- verificarea corectitudinii datei. Argumente: luna, zi, an. Returnează adevărat dacă data este corectă, de ex.
    lună - un număr întreg de la 1 la 12;
    ziua este un număr întreg care nu depășește numărul total de zile dintr-o anumită lună. În acest caz, anii bisecți sunt procesați corect;
    anul este un număr întreg de la 1 la 32767.

    De exemplu:

    Dacă (!checkdate($lună, 1, $an)) ( $d = getdate(); $lună = $d; $an = $d; )

    Atenţie! Data poate fi într-un interval valid, dar alte funcții de dată nu vor accepta valoarea. Astfel, mktime() nu ar trebui să fie folosit pentru ani înainte de 1902 și ar trebui să fie folosit cu precauție pentru ani înainte de 1970.

  • strftime()- formarea datei și orei locale. Argumente: șir de format și timp absolut. Al doilea argument este opțional. Returnează un șir cu data dată sau curentă în formatul specificat. În acest caz, numele lunilor și zilelor săptămânii sunt extrase din localitatea selectată folosind funcția șirul de format poate conține următoarele coduri:
    %ANumele prescurtat al zilei săptămânii
    %ANumele complet al zilei săptămânii
    %bNumele lunii prescurtat
    %BNumele întregii luni
    %cFormatul de dată și oră preferat
    %CNumărul secolului
    %dZiua lunii (1-31)
    %DLa fel ca %m/%d/%y
    %eLuna (1-12)
    %hLa fel ca %b
    %HCeas (format de 24 de ore)
    %ICeas (format 12 ore)
    %jZiua anului (0-365)
    %mLuna (1-12)
    %Mminute
    %nCaracter Newline
    %pNotația „am” sau „pm” este inclusă
    %rOra folosind notația a.m./p.m
    %ROra în format de 24 de ore
    %SSecunde (00-59)
    %tCaracter tabulator
    %TLa fel ca %H:%M:%S
    %uNumărul zilei săptămânii (1 - luni, 7 - duminică)
    %UNumărul săptămânii. Numărătoarea inversă începe în prima duminică a anului
    %VNumărul săptămânii conform ISO 8601:1988. Prima săptămână trebuie să aibă cel puțin patru zile, iar luni este considerată prima zi
    %WNumărul săptămânii. Numărătoarea inversă începe în prima zi de luni a anului
    %wNumărul zilei săptămânii (0 - duminică, 6 - sâmbătă)
    %XFormat preferat de dată fără oră
    %XFormatul de oră preferat fără dată
    %yAnul (două trepte)
    %YAnul (patru grade)
    %ZFus orar (nume sau abreviere)
    %% Simbolul „%”

    Orice altă informație inclusă în șirul de format va fi inserată în șirul returnat.

Lucrul cu data și ora în PHP este relativ ușor. Prezența unui număr destul de mare de funcții face ca codul să nu fie atât de greoi (și în PHP 5.2 odată cu apariția DateTime și în 5.3 cu adăugarea claselor DateInterval și DatePeriod și a metodelor individuale - lucrul cu date a devenit și mai simplu și mai mult convenabil). Deci, pentru a lucra cu data... În primul rând, în orice caz, ar trebui să rețineți că:

  • aproape orice acțiune poate fi făcută în mai multe moduri;
  • tot codul este scris pentru demonstrații și exemple de lucru;
  • Este posibil ca rezultatul alternativ propus să nu fie întotdeauna potrivit atunci când utilizați o versiune anterioară de PHP (uneori mai ușor decât editarea codului de lucru cu mulți ani în urmă);

În PHP 5.3 pentru a lucra corect cu datele pentru a evita erorile de standarde stricte. Astăzi, de regulă, această situație este luată în considerare fie în scripturi, fie în setările de găzduire.

PHP convertește marca temporală UNIX în data în formatul dat

Una dintre cele mai simple sarcini. Funcția folosită este: data($format, $time)
Primul parametru este trecerea formatului de dată - pentru mai multe detalii, consultați documentația (pentru „cel obișnuit” 28.02.2012 15:43:59 ar trebui folosit:
data("d.m.Y H:i:s", $ora)

PHP cum să aflu data de mâine/ieri

Totul este simplu și aici. Funcția time() primește ora curentă în format UNIX Timestamp. Scădem (data de ieri) sau adăugăm (mâine) numărul necesar de secunde (86400 = 3600*24 - în zile) și obținem:
$acum = timp(); // nu este necesar
$ieri = ora()-3600*24;
$maine = ora()+3600*24;
$weekBefore = time() - 3600*24*7; // acum o saptamana
echo "Ieri: ",data ("d.m.Y", $ieri),"
Maine:",data("d.m.Y",$maine);

PHP cum să obțineți o întâlnire cu o anumită compensare (X zile mai devreme/mai târziu)

Uneori trebuie să aflați o dată care va fi de câteva zile față de cea specificată. De exemplu, utilizatorul a plătit pentru serviciu pe 11 februarie 2013 timp de 3 săptămâni. Informațiile de plată sunt disponibile. Pana la ce data se plateste?

Când puteți „doar” să adăugați câteva zile și să obțineți 13 februarie, procedura nu provoacă dificultăți deosebite. Dar cum rămâne cu numărul diferit de zile dintr-o lună? Dar anii bisecti? Totul a fost deja inventat înaintea noastră - pentru a calcula data dintr-un interval cunoscut vom folosi mktime

$plata = matrice("ziua"=>11,"luna"=>2,"anul"=>2013);
$toDate = mktime(0,0,0,$plata["luna"],$plata["ziua"]+3*7,$plata["anul"]);
echo date("d.m.Y", $toDate); // concluzie
// în PHP > 5.3 folosind DateInterval
date_default_timezone_set("Europa/Moscova");
$datetime = new DateTime(data());
$datetime->sub(new DateInterval("P7D")); // minus 7 zile

PHP cum se calculează diferența dintre date

S-ar părea o situație simplă - sunt două date, numărați numărul de zile (luni și zile) între ele. Cu toate acestea, o implementare „manuală” va dura ceva timp și există șansa de a pierde ceva (pentru distracție - cei care vor să încerce pot lăsa codul în comentarii). PHP are o funcție încorporată date_diff pentru a calcula diferența dintre date, sau mai precis Datetime::diff
$datetime1 = new DateTime("2013-05-01");
$datetime2 = new DateTime("2013-01-01");
$interval = $datetime1->diff($datetime2);
echo $interval->format("%R%a zile după Anul Nou");

PHP convertește zilele DDD în X ani Y luni Z ani

Uneori trebuie să afișați ora după un anumit eveniment. De exemplu, după înregistrare a trecut. Pentru comoditate (3200 de zile nu înseamnă mare lucru), percepția poate fi convertită în ani și luni folosind formatarea DateInterval::format
$registerDate = new DateTime("2009-03-03");
$azi = nou DataTime();
$interval = $azi->diff($registerDate);
echo "S-a scurs de la înregistrare: ";
echo $interval->format("%a zile")."\n"; // numărul total de zile
ecou „sau”;
echo $interval->format("%m luni, %d zile"); // luni, zile

Traducere PHP de la dată la marcaj temporal - parsarea datei în format rus

Uneori trebuie să convertiți o dată într-un format ușor de citit în formatul UNIX TIMESTAMP Pentru a analiza o dată în formatul „2013-05-30 12:35” în componentele sale (obțineți separat anul, luna, ziua. ), puteți utiliza funcția date_parse. Pentru a converti direct la marcaj temporal Unix, puteți folosi strtotime (precum și variante precum „acum”, „+1 zi”, „joia viitoare” - php.net/manual/en/datetime.formats.php):
echo strtotime("2013-05-30");
print_r (data_parse("2013-05-30 12:35"));

Cu toate acestea, pentru Rusia, formatul mai familiar este ZZ.LL.AAAA. Puteți, desigur, să împărțiți data după simbolul perioadei, să obțineți ziua, luna, anul și să utilizați funcția mktime pentru a afla valoarea UNIX TIMESTAMP corespunzătoare. PHP5.3 a introdus funcția date_parse_from_format, în care puteți trece un șir de format. Și pentru PHP5.2 am folosit strptime (a cărui existență, după cum s-a dovedit, nu toată lumea este conștientă, poate pentru că pur și simplu nu este implementată pentru Windows: Această funcție nu este implementată pe platformele Windows):

$date = "30.05.2013 12:35";
$format = "d.m.Y H:i";
print_r (data_parse_from_format($format,$data));
// opțiune alternativă pentru PHP5.2
$format = "%d.%m.%Y %H:%M"; // diferit de cel folosit în funcția de dată
$d = strptime($data, $format);
$newDate = mktime($d["tm_hour"], $d["tm_min"], $d["tm_sec"],
$d["tm_mon"]+1, $d["tm_mday"], $d["tm_year"]+1900); // tm_mon 0-11, tm_year 1900
echo $newDate;

În plus, funcția strptime are caracteristici speciale - luna este deplasată cu unu (ianuarie - 0), iar anul este numărul de ani de la 1900, adică. pentru 2013 $d[’tm_year’] va fi egal cu 113.

Link-uri si informatii utile:
Funcții PHP dateTime http://www.php.net/manual/en/ref.datetime.php - funcții pentru lucrul cu data
Clasa PHP DateTime http://www.php.net/manual/en/class.datetime.php
PHP date_diff http://www.php.net/manual/en/function.date-diff.php
PHP strftime http://ru2.php.net/manual/en/function.strftime.php
PHP date_parse_from_format http://ru2.php.net/manual/en/function.date-parse-from-format.php

Să ne uităm la o parte din codul dintr-o pagină web reală și să creăm primul nostru script PHP, și anume, vom afișa data și ora curentă pe site-ul nostru. Acest script este folosit destul de des pe site-uri web și cred că va fi util multora.

Să creăm un alt fișier php și să numim acest fișier time.php. Am studiat-o mai devreme, dacă ai uitat, repetă.

Așa că am creat fișierul time.php și am plasat acest fișier în folderul myphp creat anterior la . Am studiat acest subiect în lecție

Deschideți codul fișierului time.php și între etichete Și

scrie urmatorul cod: Listarea 1:

Listarea 1.

Astăzi:

Ora curentă

Lansăm serverul local, introducem adresa în bara de adrese a browserului http://localhost/myphp/time.phpși apăsați Enter. Și vedem această imagine:

Vă rugăm să rețineți că în acest caz este afișată ora curentă a serverului, acestea. dacă, de exemplu, serverul pe care „locuiește” site-ul dvs. este situat într-o altă țară și ora curentă diferă de Moscova, atunci valoarea de timp afișată va diferi și de Moscova.

Să ne uităm la cod Listare 1. Etichete de text obișnuite " Astăzi" Și " Ora curentă„ nu sunt procesate de preprocesorul PHP și sunt scoase ca „este”. În loc de aceste intrări, puteți scrie orice text, de exemplu doar Data sau Timp etc.

Și aici este codul php inclus în descriptoriÎnainte de a fi dat browserului, acesta este procesat de PHP.

După cum probabil ați înțeles deja, funcția de dată în PHP responsabil pentru data și ora de ieșire. Valorile de afișare a datei și orei sunt afișate în paranteze. Există o mulțime de astfel de valori în PHP și vom dedica următoarea lecție separată acestei analize și studiului tuturor valorilor posibile.

Operatorul ecou este tradus ca retrage, în acest caz ne referim la afișarea pe ecranul monitorului DataȘi Timpul serverului.

Același rezultat (afișare în browser) poate fi obținut prin plasarea întregului script în interiorul descriptorilor PHP. Uite Lista 2:

Lista 2.

echo „Astăzi:” ;
data ecou (" j F Y ");
ecou "Ora curentă";
data echo("H:i:s");
?>

Toate elementele de text destinate ieșirii trebuie să fie cuprinse între ghilimele. Șirurile de text pot fi incluse fie între ghilimele simple, fie duble, despre diferență vom vorbi mai târziu. Postari:

ecou „Astăzi”;

ecou „Astăzi”;

sunt complet echivalente și vor apărea la fel.

Caracterul spațiu înainte de ghilimele de închidere este folosit pentru a separa rezultatul funcției de dată de textul din jur. Toate comenzile din PHP sunt întotdeauna separate prin punct și virgulă.

Pentru a afișa data și ora pe site, introduceți codul Listarea 1 sau Lista 2 la locul potrivit pe pagina dvs. web. Pentru a oferi inscripțiilor (Data și Ora) un stil general de design pentru site, puteți utiliza.

P.S. Permiteți-mi să vă reamintesc că fișierul în care plasați inserții PHP trebuie să aibă extensia .php și, în plus, găzduirea pe care „trăiește” site-ul dvs. trebuie să suporte PHP (astazi este aproape tot

Este evident că de foarte multe ori programatorii trebuie lucrați cu data și ora. Cel mai simplu exemplu este data și ora la care a fost trimis un mesaj pe un forum. Și, desigur, astfel de lucruri pot fi realizate PHP, mai ales că există oportunități pentru lucrul cu data și ora în PHP asa de mult.

Funcția de bază legată de data și ora în PHP, - Acest funcția time()., care returnează numărul de secunde care au trecut de atunci miezul nopții 01.01.1970(nașterea epocii Unix):

timpul ecou();
?>

Rulând acest script, veți afla câte secunde au trecut de atunci miezul nopții 01.01.1970 până în momentul apelului funcții time().în scenariul tău.

Desigur, pe lângă această funcție de bază, care este prezentă în toate limbajele de programare unde puteți lucrați cu data și ora(cel putin printre cele pe care le cunosc) mai exista o functie numita getdate():

$datetime = getdate();
foreach ($datetime ca $k=>$v)
ecou „$k - $v
";
?>

Prin rularea acestui script, veți vedea un set de chei în matrice și valorile lor corespunzătoare (în același timp, am repetat construcția pentru fiecare). Cred că acum nu vă va fi greu să aflați date legate de data si ora. De exemplu, pentru a afișa ora curentă, ați scrie următorul cod:

$datetime = getdate();
echo $datetime["ore"]..":".$datetime["minute"]..":".$datetime["secunde"];
?>

De asemenea funcțiile getdate(). există un parametru opțional care înseamnă numărul de secunde care au trecut de atunci miezul nopții 01.01.1970. Este făcută astfel încât această funcție să poată returna nu numai ora și data curente, ci, în general, orice:

$datetime = getdate(152353232);
echo $datetime[„an”];
?>

Ca rezultat, vei vedea 1974 an.

De asemenea este si funcția date().. Vă recomand să vă uitați la descrierea acesteia în cartea de referință, deoarece această funcție preia un parametru foarte complex care specifică formatul de ieșire a datei. Există puțin mai mult de 30 de elemente de formatare. Și în exemplul de mai jos voi da câteva dintre ele și voi privi restul în cartea de referință, pentru că nu trebuie să le memorați, dar este foarte recomandabil să vă familiarizați cu ele. Dar este necesar să cunoaștem principiul utilizării lor și următorul exemplu despre acesta:

echo date(„Azi d.m.Y H:i:s”);
?>

Drept urmare, veți vedea ceva de genul acesta: " Astăzi 15.11.2010 21:44:24". De asemenea funcții date(). Există, de asemenea, un al doilea parametru opțional care specifică timestamp-ul, exact valoarea egală cu numărul de secunde care au trecut de atunci miezul nopții 01.01.1970. Exemplu de utilizare a celui de-al doilea parametru:

echo date(„A fost odată d.m.Y H:i:s”, 5393235329);
?>

De asemenea este si funcția gmdate()., care este un analog complet funcții date()., Dar funcția gmdate(). arată ora nu în funcție de fusul orar al serverului pe care rulează scriptul, ci în funcție de Greenwich. Evident, folosind această funcție trebuie să salvați toate informațiile despre data și ora pe care utilizatorul le vede, iar la ieșire trebuie să vă adaptați la fusul orar al fiecărui utilizator (ideal, desigur):

echo gmdate ("Acum în Greenwich D M j H:i:s T Y")
?>

Drept urmare, veți vedea ceva de genul acesta: " Luni, 15 noiembrie, 18:52:45 GMT 2010„Desigur, veți vedea o dată diferită, dar într-un format similar. De asemenea, vă recomand cu tărie să intrați în cartea de referință și să vă familiarizați cu celelalte elemente de dată și oră din PHP(Am dat doar o treime), din moment ce funcțiile date() și gmdate().- acesta este cel mai simplu și rapid mod obține data și oraîn aproape orice format.