PHP: faceți un calcul de dată și numărați zile într-un mod modern
În acest scenariu vechi am crezut totul la îndemână. În PHP moderne, există clase convenabile pentru lucrul cu date și intervale de date.
Ca un prim exemplu, vom modela scenariul folosind linkul de mai sus și nu vom uita definiția zilelor săptămânii.
Când sunt setate valorile date, rămâne să se calculeze intervalul dintre acestea prin metoda DateTime :: diff. În acest caz, se calculează intervalul absolut, adică permitem ca data finală să fie mai mică decât cea inițială.
Iată ce a ieșit o bucată de cod:
Atunci vom obține forma folosind componenta modernă . care a apărut în HTML5.
Din păcate, nu toate browserele acceptă această componentă cu un calendar încorporat convenabil și cu validarea datelor încorporate. În acest moment totul va funcționa în Chrome 20+, Opera 10.1+, Android 4.4+, dar în Internet Explorer sau Firefox nu va funcționa.
Datele sunt întotdeauna trimise componentei în formatul YYYY-MM-DD.
După formular, partea principală a scriptului folosește intervalul $ găsit pentru formatarea și tipărirea datelor. Formatele Pro pentru formatul DateTime :: sunt menționate aici. ele sunt aceleași. Metoda utilității get_word_form ajută la înclinarea corectă a cuvintelor "zile", "ani" etc.
Acest script necesită versiuni PHP nu mai mici de 5.3, dar va fi mai fiabil 5.3.13 și mai sus, îmi amintesc că în 5.3.5 au existat bug-uri cu intervale, iar în 5.3.13 și 5.4.X cum ar fi, nu au existat astfel. Codificarea fișierului este presupusă a fi Unicode (UTF-8).
Apropo, dacă vrem să tipărim toate datele perioadei găsite "într-o coloană", ar putea fi făcută în acest fel (înainte de eticheta de închidere?>):
Toate formatele aplicabile pentru intervalele de date pot fi vizualizate aici.
Din punctul de vedere al programării în cod, este de asemenea instructiv ca obiectele să nu poată fi "pur și simplu alocate" de tipul $ dend = $ dstart. vor fi atribuite prin referință. Pentru a clona obiecte, vedeți, de exemplu, aici.
Acum, să scriem un calculator care vă permite să adăugați un număr de zile pozitive sau negative la data specificată, ca în acest script vechi. Scriptul poate lua metoda $ _POST după dată și numărul de zile $ zi. data curentă este setată implicit și $ day = 0. Rețineți că pentru intervalul $ interval, în orice caz, trebuie să specificați un număr pozitiv de zile și "inversarea" calculului, numărarea datelor de la mare la scăzută, va permite proprietatea inversă a componentei DateInterval.
Formă, cu excepția componentelor . va conține, de asemenea, o componentă specializată pentru introducerea unei valori numerice . Nu toate browserele îl acceptă, deși este mai mult decât data. În acest caz, Android pentru tipul de număr la momentul scrierii notei nu suportă atributele pasului. min și max.
O parte a script-ului după codul de formular va fi foarte simplă, vom format și imprima doar date din datele $ dstart și $ dend.