Autor Zpráva
MilanJ
Profil
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
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
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 *
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
MilanJ
Jo takhle, já myslel, že se jedná o UNIX timestamp.
MilanJ
Profil
Od verze 4.1 existuje fce ADD_FORMAT
Můj hosting používá verzi 3.23.49 :-/
MilanJ
Profil
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
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
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 *
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 *
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'

jinak tohle jste zkousel?
MilanJ
Profil
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
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
Nezkoušel, zkusím.
MilanJ
Profil
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
Tak zpět...pouze v SQL Serveru, v MySQL musím použít DATE_ADD(), škoda.:-/
Toto téma je uzamčeno. Odpověď nelze zaslat.