Autor | Zpráva | ||
---|---|---|---|
Tomik Profil |
#1 · Zasláno: 25. 11. 2004, 10:28:25 · Upravil/a: Tomik
Mám malinkatý problém :
Mám v MySQL uloženy dva datumy (např. "2004-01-05" a "2004-01-21") a potřebuji zjistit kolik dnů je mezi nimi rozdíl, ale jelikož v PHP není proměnná typu date nelze od sebe ty datumy odečíst. V Pascalu je proměnná typu date, lze tak datumy sčítat a odečítat. Děkuji za odpovědi. |
||
Honza Hučín Profil |
#2 · Zasláno: 25. 11. 2004, 10:49:15
PHP to neumí, ale MySQL ano. Podívej se na
http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html Například funkce unix_timestamp nebo datediff by mohly řešit tvůj problém. |
||
Tomik Profil |
#3 · Zasláno: 25. 11. 2004, 10:57:47
Díky moc. Jo a ještě jsem se chtěl zeptat jestli není v PHP (případně v MySQL) nějaká funkce, která datum (např. 2004-01-05) převede na dny (myslím tím jenom dny něco jako sekundy od roku 1970).
|
||
Tomik Profil |
#4 · Zasláno: 25. 11. 2004, 11:30:40
To Honza Hučín : Omlouvám se, ale chtěl bych se zeptat když např. SQL příkaz SELECT UNIX_TIMESTAMP provedu v MySQL_query jak dostanu odpověď toho příkazu do nějaké proměnné?
Dík za odpověď. |
||
Wan-To Profil * |
#5 · Zasláno: 25. 11. 2004, 13:20:41
Můžeš si time() vydělit počtem sekund za den, takže 86400 s.
|
||
Honza Hučín Profil |
#6 · Zasláno: 25. 11. 2004, 13:23:24
Ad Tomík: UNIX_TIMESTAMP ti to dá v sekundách, pak to vydělíš 86400. Na druhou otázku jsem odpověděl v příslušném tématu, které jsi založil.
|
||
Tomik Profil |
#7 · Zasláno: 25. 11. 2004, 14:11:18
Díky
|
||
Lemur Profil * |
#8 · Zasláno: 25. 11. 2004, 16:29:08
Pokud je třeba, aby MySQL vrátilo jenom něco, tj. zaznámy v určitem casovém období, je lepši to nacpat přímo do selectu. A datumy je opravdu lepši mít jako timestamp, protože zaprvé se s nima lépe pracuje a take zabírají mín místa (jen mě trochu děsí Y2K38, jen doufám, ze v tý době budou všude 64bity). A pokud se v updatu položky co jsou timestamp neuvedou, MySQL do nich hodí aktualni čas updatu (tedy pokud se něco mění, tj. afected rows není 0). Takze výsledny selekt muze vypadat těeba takle:
select date_format(ts,'%d. %m.%%Y') as datum, date_format(ts,'%H:%i:%s') as cas, polozka from tabulka where unix_timestamp(ts)>(unix_timestamp()-86400) order by ts desc Talhe query vypíse položky z tabulky tabulka, ktera má prvky ts (timestamp) a položka (jedno co), které nejsou starší než 24 hodin (86400 sekund), tak, že v query vráti hezky naformátované datum, čas a položku, takže se nic nemusi prevádět, no a ješte je to setřidi tak, ze první je nejmladší. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0