Autor | Zpráva | ||
---|---|---|---|
MilanJ Profil |
#1 · Zasláno: 13. 4. 2006, 12:36:41
Z db dostanu pole, ve kterém je uloženo datum ve formátu TIMESTAMP a já bych k němu potřeboval přičíst nebo odečíst několik hodin, popř. dnů a měsíců.
Jak na to? |
||
koudi Profil |
#2 · Zasláno: 13. 4. 2006, 13:01:42
Timestamp je počet sekund od roku někdy tuším 70. Je-li tedy tento formát jenom prostě vyjádření počtu sekund, tak ti nic nebrání k něco určitý počet sekund přičíst (např 3600 jako hodinu). Spočítej si, kolik sekund má počet dní co chceš přidat a jednoduše to přičti.
|
||
MilanJ Profil |
#3 · Zasláno: 13. 4. 2006, 13:17:01
Já beru TIMESTAMP z db MySQL a tam má tvar např. 20060403100000, tj. rok+měsíc+den+hodina+minuta+vteřina.
Můžu k tomu nějak přičíst dny a hodiny? Musím to na něco převést? |
||
finc Profil * |
#4 · Zasláno: 13. 4. 2006, 13:40:16
Předpokládám, že používáte mysql. Od verze 4.1 existuje fce ADD_FORMAT, manual Vám s tím již pomůže.
|
||
koudi Profil |
#5 · Zasláno: 13. 4. 2006, 13:49:35
MilanJ
Jo takhle, já myslel, že se jedná o UNIX timestamp. |
||
MilanJ Profil |
#6 · Zasláno: 13. 4. 2006, 16:09:51
Od verze 4.1 existuje fce ADD_FORMAT
Můj hosting používá verzi 3.23.49 :-/ |
||
MilanJ Profil |
#7 · Zasláno: 14. 4. 2006, 09:09:46
Tak řešení už jsem našel tady na diskuzi, nicméně...když odečítám 2 datumy, výsledný rok moc nesedí...
Např.: $aktualny=time(); //dnesny datum $stary=mktime(11,32,54,11,9,2001); // 11:32:54, 9.11.2001 $rozdil=$aktualny-$stary; echo date("y",$rozdil)." roku,".date("m",$rozdil)." mesícu, ".date("d",$rozdil)." dnu,".date("H",$rozdil)." hodin,".date("i",$rozdil)." minut a ".date("s",$rozdil)."sekund."; Výsledek: 74 roku,06 mesícu, 05 dnu,21 hodin,36 minut a 21sekund Výsledkem je správné odečtení měsíců, dnů, hodin, minut a sekund, ale rok ukazuje nesmysl. Nebo to tak má být a rok se musí nějak odečítat? |
||
koudi Profil |
#8 · Zasláno: 14. 4. 2006, 09:56:24
To je vcelku jasný. mktime ti dává počet sekund od roku 70. Čili když odečteš 2005 - 2001, dostaneš 4 (zhruba, pak sou tam ještě ty dny apod.). ->máš přibližně počet sekund za čtyři roky -> Date to bere jako rok 1974, proto ta 74. Ono ty totiž ve skutečnosit nezobrazuješ rozdíl, ale nový datum, který ti takhle vzniklo.
Teď zrovna nevim jak to řeśit, ale zkusim se na to mrknout. |
||
MilanJ Profil |
#9 · Zasláno: 14. 4. 2006, 10:49:16
Hledal jsem, jestli to tu už někdo řešil, ale správný odpočet dvou TIMESTAMPu jsem nikde nenašel....tedy odpočet včetně správného zobrazení roku.
|
||
finc Profil * |
#10 · Zasláno: 14. 4. 2006, 10:58:29
SQL: DATE_FORMAT (dalo by se to pres ni spocitat, ale s prestupnymi roky + prelomy mesice, roku tim dost dobre neosetrite)
jinak spise bych si promluvil s adminem vaseho webhostingu, verze 3.23 je opravdu moc stara PHP: strftime() + mktime() + date() existuje spoustu reseni, ale spise bych se tomu vyhnul, pricitani urcite hodnoty k datumu pomoci silenych algoritmu byva dost pomale |
||
finc Profil * |
#11 · Zasláno: 14. 4. 2006, 10:59:31
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02' jinak tohle jste zkousel? |
||
MilanJ Profil |
#12 · Zasláno: 14. 4. 2006, 11:01:42
Možná by to šlo ošetřit přímo v MySQL, mám totiž 2 data vytvořená v MySQL funkcí TIMESTAMP() a potřebuji zjišťovat rozdíly mezi 2 daty. Jen se mi nedaří vytvořit dotaz, ze kterého by "vypadly" srozumitelné výsledky.
|
||
MilanJ Profil |
#13 · Zasláno: 14. 4. 2006, 11:02:36
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
Nezkoušel, zkusím. |
||
MilanJ Profil |
#14 · Zasláno: 14. 4. 2006, 11:12:20
finc
Funkcí DATE_ADD() jsi mě navedl na jinou funkci, a to DATEDIFF(), která přímo dokáže zjišťovat čas mezi dvěma daty. Díky.;-) |
||
MilanJ Profil |
#15 · Zasláno: 14. 4. 2006, 11:13:18
Tak zpět...pouze v SQL Serveru, v MySQL musím použít DATE_ADD(), škoda.:-/
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0