Portál AbcLinuxu, 10. května 2025 06:36

Dotaz: Jak spocitat rozdil uplneho datumu v PHP

22.8.2006 19:30 Petr
Jak spocitat rozdil uplneho datumu v PHP
Přečteno: 7489×
Odpovědět | Admin
Cau, resim problem a nevim jak na nej, normalne bych to resil primo v MYSQL. V tabulce jsou obsazeny pole datetime.

format rok-mesic-den hodina-minuta-sekunda

A ja potrebuju s timhle datumem pocitat.

napr. 2006-10-10 10:10:10 - 2006-09-10 10:00:00

Da se to nejak jednoduse v php?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.8.2006 20:23 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Php nepoužívám, ale určitě má funkci, která převede datum do nějakého zpracovatelného formátu (např. unixový čas), kde provedeš odečtení a výsledek potom zpětně převedeš na čas. Prostuduj dokumentaci
When your hammer is C++, everything begins to look like a thumb.
24.8.2006 00:03 bradu
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Programujem v PHP od nejakej 3kovej verzie a mysql som tiez pouzival nejaky ten rok.

Ale vobec nechpem preco pouzivaju ludia fomat v danom formate. Len si tym clovek komplikuje zivot. Pouzivam unix time je to prakticke dobre sa s tym pocita a naformatujes si to uplne krasne do coho len chces cez najroznejsie funkcie v php.

S cislom sa operuje ovela jednoduksie
24.8.2006 04:33 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Programuji v PHP od trojkové verze a MySQL také používám nějaký ten rok. Typy datetime a date používám naprosto bez problémů. Není to spíš o tom, jak dobře znáte možnosti MySQL? Naprostou většinu rozumných formátů data si mohu vytvořit pomocí funkce DATE_FORMAT přímo v SQL dotazu.

Mimochodem, jak uložíte do timestamp data narození lidí starších než UNIX?
24.8.2006 18:10 bradu
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Dost casto sa mi stava ze ludia nie velmi chapu preco nieco hovorim a ako to myslim, preto to trosku rozvediem.

Ked si precitate lepsie otazku cloveka, ktory sa na nieco pytal zistite , ze on vie ako sa robi nieco v MySQL, ale potrebuje to robit v PHP, (cize MySQL ovlada minimalne ako vy , ja a mnoho dalsich)

..ale ak nepozna vsetky moznosti PHP (co je velmi pravdepodobne) je teda mozne, ze zacne dane retazce parsovat a nasledne lepit a potom konvertovat cez strtime, alebo date alebo pod. Co ako asi sam uznate nebude najefektivnejsia a najednoduksia cesta.

Pretoze ako pise potrebuje to robit v PHP.

Urcite mozete namietnut ze aj to moze spravit za neho DB, iste ano moze, ale on nepise ze to potrebuje robit v nejakej interaktivite z DB, nehladiac na to ze pri nejakom suvislom bloku ktory nema nic na praci s DB skakat do DB len koly prevodu casu...

A teda to nehovorim preto, ze by som nepoznal rozne casove formaty a ich moznosti, alebo chcel niekoho "prudit".

Ja tu nenapadam ludi ktori viedia preco pouzivaju format casu tak ako ho pouzivaju a nechcem tu rozputavat FLAME, teda ani Vas lebo evidentne viete preco sa veci robia a ako sa robia (ak sa vas to nejakym sposobom dotklo alebo niekoho ineho ospravedlnujem sa), ale casto vidim, ze to robia ludia ktori netusia preco a naco. Bez toho aby vyuzivali vyhody ktore z toho plynu a robia to len preto lebo to tak niekde videli.

A uznavam ze ani neponukam uplny navod, ako to presne robit pretoze vecer po nejakych 14 hodinach prace, ked som reagoval som uz nebol zrovna FIT.

Skor som len ukazal smer..

>>> Najlepsie sa pocita s celymi cislami, aspon mne to pripada jednoduksie.

Ked clovek pouziva date(), alebo time alebo pod. zisti nasledovnu vec aj ked si neprecita manual, kde pisu rok 1970 atd atd atd. je minimum co sa da riesit atd.

1990 1980 1970 atd atd atd = 0 sekund 1960 1950

V byvalej praci som bol donuteny pouzit unix time aj na nevhodnom mieste a zapisat aj rocniky ako 1959, nepytajte sa preco, proste musel som to takto pouzit pretoze som nieco implementoval do niecoho co uz fungovalo dlho a nerobil som to ja, spolupracovalo to z dalsimi jazykmi atd atd.

Hovorim sefovy takto sa to spravit neda...

Ale ked som studoval nejake fora zistil som ze sa to da poriesit.

kedze som musel developovat aj na winXX aj linuxoch a pre linux

samozrejme som prisiel aj k takejto hlaske

Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 ....

co sa zda byt beznym warning-om

... mozno je tam ale jedno v Linuxovej komunite obzvlast "Oblubene" slovo navyse, ktore vas deli oduplnej pravdy..

Riesenie vyplyva z kontextu

Samozrejme odcitanie scitanie atd sa da robit roznym sposobom kazdy ma svoje metody, ktore pouziva v zavisloti na implementacii a konkretnych moznostiach a casu v ktorom moze nieco intuitvne a dostatocne efektivne (lacno a pokial mozno co najlepsie) naprogramovat
24.8.2006 21:10 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
MySQL neumožňuje uložit záporný timestamp; neboli do sloupce typu timestamp nelze uložit data před unixovou epochou.

Používání záporného 32b timestamp bych nedoporučoval, protože snadno může dojít k přetečení, pokud se počítá rozdíl dvou timestamps.

Díky za příspěvek, doposud mě nenapadlo používat time_t plně jako signed. Možná právě kvůli nezaručené funkčnosti záporných hodnot.
Dalibor Smolík avatar 24.8.2006 00:53 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
já jsem tohle řešil právě v MySQL, použil jsem funkci unix_timestamp, např. rozdíl mezi současným datem a datem zadaným něco jako select (unix_timestamp(curdate())-unix_timestamp(datum))/86400 rozdil from tabulka
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
24.8.2006 04:20 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
IMO elegatněji: SELECT DATEDIFF(CURDATE(), datum) AS `interval` FROM tabulka
24.8.2006 09:37 Richard Gavenda | skóre: 19 | Třinec
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Tahle funkce ale varcí pouze dny. Protože mě tento problém zaujal, začal jsem v tom směru pátrat, a nepřisel jsem na žádný kloudný způsob. jak přímo v MySQL odečíst dva sloupce DATETIME, abych dostal zase DATETIME, tedy zjistit rozdílem, kolik uběhlo mezi dvěma časy roků-měsíců-dnů hodin:minut:sekund. Nejdál jsem se dostal s výrazem SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('2006-10-10 10:10:10') - UNIX_TIMESTAMP('2006-09-10 10:00:00')) ale to znemožní odčítat data starší než 1970.
24.8.2006 12:07 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Váš postup je chybně. Pominu-li, že získáte rok zvětšený o 1970, měsíc o 1 a den o 1, tak s délkou měsíce zacházíte velice svérázným způsobem. Například prvního března minus posledního ledna, je podle mě měsíc a den, nikoliv 29 dní.

Pokud chcete od sebe odečíst roky, měsíce a dny, nic vám nebrání v tom to učinit, jen si musíte ohlídat podtečení. MySQL na to zatím žádnou funkci nemá.
8.1.2015 16:24 kubik256
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Kdyby někdo ještě hledal jako já, tak tohle řeší MySQL funkce TIMESTAMPDIF (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff)
24.8.2006 10:31 V3lbl^^d
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Staci trosku zabrouzdat v manualu ;-)

http://cz2.php.net/manual/cs/function.strtotime.php

http://cz2.php.net/manual/cs/function.date.php

takze, pisu to z hlavy a nemam to odzkouseno, ale:

date("Y-m-d H:i:s", strtotime($date1)-strtotime($date2));
AraxoN avatar 24.8.2006 20:30 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP

Obávam sa, že výsledkom toho date() bude v tomto prípade zbytočne mätúci údaj vyzerajúci nejak takto: 1970-01-?? ??:??:??. Tie strtotime() sú OK, sám ich už dlho používam na konverziu z ISO-tvaru na timestamp. Aj ten rozdiel je OK - vráti rozdiel oboch údajov v sekundách. Ale to spätné naformátovanie na dátum je nezmyslom, pretože timestamp nemá začiatok v roku 0. Ak treba zo sekúnd vyrátať minúty, hodiny, dni, tak pomôže len delenie.

$sek=strtotime($date1)-strtotime($date2);

$min=floor($sek/60);
$sek=$sek%60;

$hod=floor($min/60);
$min=$min%60;

$dni=foor($hod/24);
$hod=$hod%60;

echo "Rozdiel je $dni dni, $hod hodin, $min minut a $sek sekund.\n";
AraxoN avatar 24.8.2006 20:32 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak spocitat rozdil uplneho datumu v PHP
Oops, samozrejme že má byť:
$hod=$hod%24; // nie %60

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.