Black friday Black friday
Pouze tento týden až 80% sleva na PHP, Nette, Symfony!
Aprílový black friday tě nenechá v klidu! Až 80 % prémiového obsahu zdarma. Více informací
Avatar
michal Čepelák:25.12.2018 21:12

Zdravím,
nevím jak mám udělat rozdíl mezi časi.
chci udělat time tracker ale nevím v jakém formátu ten čas ukládat abych si pak mohl udělat rozdíl mezi začátkem práce a koncem práce nebo jestli na to bude lepší použít javascript?
V jakém formátu ukládat čas do databáze? Bylo by to zadavány přes formulář

Zkusil jsem: Hledal jsem na internetu ale zatím jsem nic nenašel jak to jednoduše udělat.

Chci docílit: chci docsáhnout abych měl v databázi např. začátek práce 15:00 konce práce 16:10, celkový čas práce 1:10 hod nebo jestli to formátovat jiným způsobem pro databázi?
potom pro určitý projekt se celkový čas práce sečte a udělá se report, který se odešle emailem vedení.
Děkuji moc za rady

 
Odpovědět 25.12.2018 21:12
Avatar
Odpovídá na michal Čepelák
Uživatel sítě :25.12.2018 22:53

Ahoj,

určitě bych použil datum i čas klasickým databázovým formátem a užil na to:

http://php.net/…ime.diff.php

Nahoru Odpovědět 25.12.2018 22:53
Chybami se člověk učí, běžte se učit jinam!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31.12.2018 16:55

google = mysql date
https://dev.mysql.com/…nctions.html

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26' -- 'YYYY-MM-DD HH:MM:SS'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000 -- YYYYMMDDHHMMSS.micro

https://dev.mysql.com/…e-types.html
11.3 Date and Time Types
Tady zminuji o automatickem updatu (jakoze pri vytvoreni radku ti umi dat do toho sloupce default hodnotu podle aktualniho casu databaze, pokud ji neuvedes v INSERT dotazu) pro typy: TIMESTAMP and DATETIME.
Coz je fajn, proto se pouzivaji tyhle 2.
S timestamp se lepe pracuje pro rychle vyhledavani.
Datetime je take pouzitelne pro vyhledavani, ale je to string. takze je spise vhodnejsi pro zobrazovani.
Vetsina lidi dava prednost pohodli, datetime (string 10).
Ve firme, kde probiha milion transakci denne, treba vsechny pokladny v supermarketu, tam pri prohlizeni zaznamu, pokud to nekdo potrebuje delat casto, je lepsi timestamp (string 4).
Nebo muzes ulozit oba udaje. Pokud ti nevadi duplicitni polozka ve sloupci.

Jo, zapomnel jsem zminit, ze je treba si pohlidat casovou zonu. Takze je dobre pouzivat udaj sql serveru a ne cislo od uzivatele, ktere bys musel prepocitavat. Prepocitavani pro SELECT zas tak nevadi. (na druhou stranu, select se dela asi vicekrat :) )

 
Nahoru Odpovědět 31.12.2018 16:55
Avatar
michal Čepelák:3. ledna 22:05

jak se dá sečíst více času ve formátu
1:20:00
0:30:00
0:20:00
0:10:00
a výsledek je 2:20:00
napadlo mě to převest na milisekundy a sečíst do hromady ale už nemohu přijít na to jak to zase vrátit zpět na tento formát h:m:s .
Nebo to počitat jiným způsobem?
Děkuji moc za rady

 
Nahoru Odpovědět 3. ledna 22:05
Avatar
zitekv
Člen
Avatar
Odpovídá na michal Čepelák
zitekv:4. ledna 9:51

Zpět to převedeš pomocí celočíselného dělení a zbytku po celočíselném dělení tzv. modulo.

 
Nahoru Odpovědět  -1 4. ledna 9:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. ledna 10:55

google = mysql time plus

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_addtime
mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
        -> '03:00:01.999997'
 
Nahoru Odpovědět 4. ledna 10:55
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. ledna 11:00

google = php time plus

$endTime = strtotime($selectedTime) + 900;

$selectedTime = "9:15:00";
$endTime = strtotime("+15 minutes", strtotime($selectedTime));
echo date('h:i:s', $endTime);

$selectedTime = "9:15:00";
$datetime = DateTime::createFromFormat('g:i:s', $selectedTime);
$datetime->modify('+15 minutes');
echo $datetime->format('g:i:s');
 
Nahoru Odpovědět  +1 4. ledna 11:00
Avatar
Dominik Valentík:10. ledna 22:52
$zacatek = strtotime('08:00:00');
$konec = strtotime('10:45:00');
$rozdil = round(abs($konec - $zacatek) / 3600,2);
echo $rozdil;
 
Nahoru Odpovědět  +1 10. ledna 22:52
Avatar
michal Čepelák:14. ledna 22:08

poradíte někdo jak dostat výsledek z těchto časových údajů pomocí PHP
0:30:00
0:20:00
1:10:00
= 2:00:00

Děkuji moc za radu

 
Nahoru Odpovědět 14. ledna 22:08
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15. ledna 8:15

Kdyz ti nevyhovuje zadne z tech reseni, muzes si udelat vlastni funkci a naexplodovat si to.

echo $strA.'<br>';
echo $strB.'<br>';
$arrA = explode(":", $strA);
$arrB = explode(":", $strB);
$arrA[0] = $arrA[0] * 1 + $arrB[0] * 1;
$arrA[1] = $arrA[1] * 1 + $arrB[1] * 1;
$arrA[2] = $arrA[2] * 1 + $arrB[2] * 1;
echo implode(":", $strA).'<br>';
Editováno 15. ledna 8:17
 
Nahoru Odpovědět 15. ledna 8:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.