Nagy általánosságban a hozzáértők a dátumukat UNIX TIMESTAMP-ként (időbélyeg) tárolják integer vagy unix timestamp típusú adatbázis-mezőkben. Felmerülhet egy olyan kérdés, hogy abban az esetben, ha én az átláthatóság kedvéért szöveges formátumban szeretném tárolni a dátumom (pl. egy varchar típusú mezőben), hogyan oldható meg a ma/tegnap funkció. Természetesen a lapon előzőleg bemutatott funkció ehhez nem lesz jó, ezért mikor nekem ilyen problémám volt, csináltam hozzá egy saját funkció-t.
Tegyük fel, hogy a dátumot Y. m. d., H:i formátumban tároljuk. (pl.: 2006. 08. 13., 14:54)
Akkor nevezzük el a funkciónk ma_tegnap -nak, és a bemeneti paraméter legyen a $date változó.
1 2 3 4 | <?php function ma_tegnap($date) { } ?> |
Először „méretre kell vágni” a dátumunk. Így szerezzük meg a a dátum stringből az évre, hónapre és napra vonatkozó részt. A „méretre vágást” a substr funkcióval végezzük el. Két részre fogjuk szétszedni mégpedig egy „Y. m. d.” formátumra és egy „H:i” formátumra.
1 2 3 4 5 6 | <?php function ma_tegnap($date) { $ymd = substr($date, 0, 13); //ezzel megkapjuk az Y. m. d. formátumot $hour = substr($date, 15, 5);//ez a H:i formátum } ?> |
Most meg kéne határoznunk, hogy mi a ma, és mi a tegnap.
1 2 3 4 5 6 7 8 9 | <?php function ma_tegnap($date) { $ymd = substr($date, 0, 13); //ezzel megkapjuk az Y. m. d. formátumot $hour = substr($date, 15, 5);//ez a H:i formátum $ma = date('Y. m. d.'); $tegnap = date('Y. m. d.',mktime()-84600); } ?> |
Most nincs más dolgunk, mint összehasonlítani az $ymd változónk a $ma és $tegnap változókkal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php function ma_tegnap($date) { $ymd = substr($date, 0, 13); //ezzel megkapjuk az Y. m. d. formátumot $hour = substr($date, 15, 5);//ez a H:i formátum $ma = date('Y. m. d.'); $tegnap = date('Y. m. d.',mktime()-84600); if($ymd == $ma) { //Ha mai a dátum. $date = "ma, $hour"; //ma, H:i } if($ymd == $tegnap) { //Ha tegnapi a dátum. $date = "tegnap, $hour"; //tegnap, H:i } } ?> |
Még van egy utolsó dolgunk. Vissza kell adnunk a változót. Így a teljes kód:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php function ma_tegnap($date) { $ymd = substr($date, 0, 13); //ezzel megkapjuk az Y. m. d. formátumot $hour = substr($date, 15, 5);//ez a H:i formátum $ma = date('Y. m. d.'); $tegnap = date('Y. m. d.',mktime()-84600); if($ymd == $ma) { //Ha mai a dátum. $date = "ma, $hour"; //ma, H:i } if($ymd == $tegnap) { //Ha tegnapi a dátum. $date = "tegnap, $hour"; //tegnap, H:i } return $date; } ?> |
Alkalmazni pedig a következőképpen lehet: ma_tegnap(dátumváltozónk)
Az esetleges kérdésekkel nyugodtan lehet hozzám fordulni, engem megtaláltok a fórumon.
Jackson
A cikkbe előzetes egyeztetés után javítottam,
BlackY
Mikor használni próbáltam volna ezt a scriptet, akkor vettem észre hogy csak 23,5 órát von ki az aktuális timestampből Ezért éjfél előtt fél órával már tegnapot ír a mai dátumokra. A helyes érték nem -84600 hanem -86400. :)
Üdv,
Scream