Ma/tegnap funkció “varcharosan”

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

1 hozzászólás

  1. 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

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét