[Megoldva] PHP datetime-ból csak time

Fórumok

Sziasztok!

Van egy mezőm MySQL-ben, amiben Y-m-d H:i:s formában tárolok időt, dátumot. A kérdés, hogy lehetne ebből H:i:s -t csinálni úgy, hogy a következő helyzetben már ki kell számolni a mostani időből a szelektált időt, és a kapott eredményt kiiratni képernyőre?

UI: Codeigniter keretrendszert használok.

tmms

Megoldás:

$to = date("Y-m-d H:i:s");
$from = $row->elvallalas_datuma;

$total = strtotime($to) - strtotime($from);
$hours = floor($total / 60 / 60);
$minutes = round(($total - ($hours * 60 * 60)) / 60);

$hours2 = floor($total / 60 / 60 * 60);

$date2 = "($hours óra $minutes perc)";
$date3 = "~$hours2 perce";

echo "$row->elvallalas_datuma $date2";

Hozzászólások

mysql> select now(), time(now());
+---------------------+-------------+
| now()               | time(now()) |
+---------------------+-------------+
| 2014-03-19 15:26:14 | 15:26:14    |
+---------------------+-------------+
1 row in set (0.01 sec)

PHP-ban is van egy sor formázó pl.:
echo date('H:i:s',strtotime('2014-03-19 15:26:14'));

De mit jelentenek a "következő helyzet" ill. "mostani időből szelektált idő" szintagmák?

Ne PHP oldalon, hanem a queryben végezd el a konverziót, az jelentősen gyorsabb.

SELECT DATE_FORMAT(mezo,'%H:%i:%s') FROM tabla

Úgy értem, hogy jelenleg lekérhetem a "Y-m-d H:i:s" formátumot db-ből.
Következő körben (gyengébbek keddvéért sorban) a fent megadott H:i:s -t csinálok.

DE!

A jelenlegi H:i:s -ből szeretnék kivonni az adatbázisban megadott H:i:s-t. Tehát egy X percet szeretnék megkapni a jelenlegi időből date(H:i:s); kivonva az adatbázisban tárolt H:i:s -t.

elobb vonj ki x percet, mert elkepzelheto, hogy a kivonas utan mar az elozo napra esik az idopont.

mysql> select now(), date(now() - interval 42000 second), time(now() - interval 42000 second);
+---------------------+-------------------------------------+-------------------------------------+
| now()               | date(now() - interval 42000 second) | time(now() - interval 42000 second) |
+---------------------+-------------------------------------+-------------------------------------+
| 2014-03-20 09:56:27 | 2014-03-19                          | 22:16:27                            |
+---------------------+-------------------------------------+-------------------------------------+
1 row in set (0.00 sec)

t


$datenow = date("Y-m-d H:i:s");
$dateakkor = $row->elvallalas_datuma;

$from = $dateakkor;
$to = $datenow;

helyett rögtön:

$to = date("Y-m-d H:i:s");
$from = $row->elvallalas_datuma;

?

Ebbe a kódba kellene belenyúlnom, kinyomtatnám egy téglára és a fejedhez vágnám :)
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Azért a MySQL is el van látva dátum és idő függvényekkel, számoltasd ki vele.

-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"

Én a lekérdezést is úgy írnám meg, hogy:


SELECT
elvallalas_datuma
, TIME(elvallalas_datuma) AS elvallalas_datuma_ido
, HOUR(elvallalas_datuma) AS elvallalas_datuma_ora
, MINUTE(elvallalas_datuma) AS elvallalas_datuma_perc
, ABS(SECOND(DATEDIFF(NOW(), elvallalas_datuma))) AS time_elapsed_sec
, ABS(MINUTE(DATEDIFF(NOW(), elvallalas_datuma))) AS time_elapsed_min
...

FROM table
WHERE ...

-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"