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

Kapcsolódó bejegyzések:
  • A következőkben azt szeretném bemutatni, hogy a dátumoknál hogyan is írathajuk ki azt, hogy ha a blog bejegyzést például ma írtam, akkor azt írja, hogy “Ma, 18:1 …

  • Ezt a kis kódrészletet azért osztom meg, mert sok javascriptes megoldást láttam már a dátum kiíratására. Alapból nekem nem tetszett, ahogy a php kiírja a date fü …

  • Honlapkészítés során számos olyan eset lehet, amikor nincs szükség a dátumok kiiratására. Pl. benne van az URL-ben és a lapon már felesleges, vagy olyan a téma a …

  • A minap belefutottam abba a problémába, hogy nem a dátumot kellett kiíratnom, hanem az azóta eltelt időt. Nos itt van rá egy script.

  • Ez egy hírküldő script. Működése nagyon egyszerű. Mindössze 3 fájlból áll, és adatbázis alapú a hírek tárolása. A dbconnect.php segítségével kapcsolódik az adat …

A cikket beküldte: Jackson ()

1 hozzászólás

  1. Scream says:

    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

Szólj hozzá
a Ma/tegnap funkció “varcharosan” c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>