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";
- 5848 megtekintés
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)
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
echo substr('2014-03-19 15:26:14', -8);
És akkor a konvertálást is megúszod. Bár inkább sql-ben csinálnám.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
a time() gyorsabb, egyszerűbb, vagy van különbség?
- A hozzászóláshoz be kell jelentkezni
select benchmark(n, $query)
- A hozzászóláshoz be kell jelentkezni
Ú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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Vagy mint unix timestamp végezze el a kivonást
-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"
- A hozzászóláshoz be kell jelentkezni
$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"
- A hozzászóláshoz be kell jelentkezni
Igen, igazad van, később rájöttem erre.
- A hozzászóláshoz be kell jelentkezni
É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"
- A hozzászóláshoz be kell jelentkezni