ugrás a tartalomhoz

php idő kivonás és összeadás

unregistered · 2015. Okt. 29. (Cs), 18.53
Sziasztok!

Van egy elvi és egy gyakorlati kérdésem.

Kezdem hogy mit szeretnék:
Van két időpontom letárolva mySQL-ben azokat szeretném kivonni egymásból (a későbbiből a korábbit) majd az eredményt szeretném összedadni egy már ugyanilyen kivonásból származó eredménnyel.

Elvi kérdésem:
Mit érdemes használni MySQL-ben, datetime-ot, vagy timestampet?

Gyakorlati kérdésem:
Ha a datetime-ot választom akkor ezzel a kóddal le lehet tudni a dolgot (itt még nincs meg az összeadás, mert az istenért nem akar sikerülni az add-dal, tehát ha van valami egyszerű megoldás ne kíméljetek):
  1. // ez a már letárolt idő amihez hozzá kell adni a kivonás eredményét  
  2. $date0 = new DateTime('00:10:00');  
  3.   
  4. //ez itt a kivonás  
  5. $date1 = new DateTime('2015-10-28 17:00:00');  
  6. $date2 = new DateTime('2015-10-28 17:09:02');  
  7. $diff = date_diff($date2,$date1);  
  8.           
  9. echo 'kivonás: ' . $diff->format('%H:%I:%S') . '<br /><br />';  
Itt meg az a verzió van ha időbélyeget használok (itt hiányzik az összeadás, de ugye itt az nem nehéz mert csak a két időbélyeggel kell zsonglörködni):
  1. function time_elapsed_A($secs){  
  2. $bit = array(  
  3.     'év' => $secs / 31556926 % 12,  
  4.     'hét' => $secs / 604800 % 52,  
  5.     'nap' => $secs / 86400 % 7,  
  6.     'óra' => $secs / 3600 % 24,  
  7.     'perc' => $secs / 60 % 60,  
  8.     'másodperc' => $secs % 60  
  9. );  
  10.                               
  11.      foreach($bit as $k => $v)  
  12.           if($v > 0)$ret[] = $v . $k;  
  13.           return join(' '$ret);  
  14. }  
  15.                           
  16. $nowtime = 1420390089;  
  17. $oldtime = 1420389959;  
  18.   
  19. //itt hozzáíródik hogy perc, másodperc, stb, de ez már csak formázási gyakorlat hogy például 00:02:10 legyen                      
  20. echo 'kivonás: ' . time_elapsed_A($nowtime-$oldtime);  
Azért itt tisztán látszik hogy nem éppen olyan elegáns megoldás mint a datetime-nál.

Én jelen pillanatban a datetime-ra szavaznék, de ott az összeadás még problémás számomra, de most kicsit elbizonytalanodtam és ezért kérem a segítségeteket amit előre is nagyon köszönök!
 
1

Timestamp

Hidvégi Gábor · 2015. Okt. 30. (P), 09.23
Ha MySQL-ben vannak az értékek, egyszerű lekérdezéssel elvégezheted ott az összeadásokat, kivonásokat. Szerintem egyszerűbb egyébként timestamp-ben tárolni az adatokat, vagy lekérdezésben SELECT UNIX_TIMESTAMP(datum) AS idobelyeg; -et használni.
2

működés

unregistered · 2015. Okt. 30. (P), 11.33
Nem írtam le hogy mire lesz használva:
Az az elképzelés hogy minden munkafázisomhoz felveszek egy rekordot, majd elindítok egy számlálót és a munka végeztével megállítom azt. Ha ez az első akkor az mentődik el, ha nem akkor egy 'összes' rekordban hozzáadódik az ott már letárolthoz.
Ez légyegében egy stopper ami összeadja a részidőket, csak már baromira unom írni ezeket :D

Na és akkor itt jön a kérdés a válaszodhoz:
Ha van kb 200 munkafázisom, és nincs letárolva az előzőek összege, akkor minden 'összes' megjelenítésnél a MySQL-t túráztatom, nem?
3

Ha van kb 200 munkafázisom,

Poetro · 2015. Okt. 30. (P), 11.44
Ha van kb 200 munkafázisom, és nincs letárolva az előzőek összege, akkor minden 'összes' megjelenítésnél a MySQL-t túráztatom, nem?

Igen, akkor valamelyik végen dolgoztatni fogod a processzort. Vagy MySQL vagy PHP oldalon. Egyébként nem szokás számítható adatokat tárolni adatbázisban, kivéve gyorsítótár céljából.