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):

// ez a már letárolt idő amihez hozzá kell adni a kivonás eredményét
$date0 = new DateTime('00:10:00');

//ez itt a kivonás
$date1 = new DateTime('2015-10-28 17:00:00');
$date2 = new DateTime('2015-10-28 17:09:02');
$diff = date_diff($date2,$date1);
		
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):

function time_elapsed_A($secs){
$bit = array(
    'év' => $secs / 31556926 % 12,
    'hét' => $secs / 604800 % 52,
    'nap' => $secs / 86400 % 7,
    'óra' => $secs / 3600 % 24,
    'perc' => $secs / 60 % 60,
    'másodperc' => $secs % 60
);
					        
     foreach($bit as $k => $v)
          if($v > 0)$ret[] = $v . $k;
          return join(' ', $ret);
}
					    
$nowtime = 1420390089;
$oldtime = 1420389959;

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