Autor Zpráva
Stepanka
Profil *
Ahoj,

prosím mohl by mi někdo poradit?

Mám datum ve formátu například 13.01.2009 a potřebovala bych ho uložit do databáze ve formátu unixtime.

Ten dotaz vypadá třeba nějak takto:

UPDATE galerie SET
nazev='" . addslashes($_POST['nazev']) . "',
popis='" . addslashes($_POST['popis']) . "',
cas='".date_format(TO_UNIXTIME($_POST['datum']),"%Y%m%d")."',
aktivni='" . intval($_POST['aktivni']) . "'
WHERE id='" . $_POST['id'] . "'


Ten zvýrazměný řádek je chybný, neukládá to správně..

Děkuju.
Stepanka
Profil *
Tak už nic, už se mi to povedlo s: cas=UNIX_TIMESTAMP('".date("Y-m-d", strtotime($_POST['datum']))."'),
Stepanka
Profil *
Co je lepší? Ukládat data do databáze jako 1) DATETIME, nebo 2) jako INT(11) a TIMESTAMP, čili v počtu sekund?
TFSi
Profil
Stepanka
Co je lepší?
TO záleží na tom, co s tím potom chceš dělat. Pokud ti jde jenom o zobrazení datumu, tak z timestampu jej budeš muset ještě převádět na požadovaný formát (i když to není žádná tragédie)
Stepanka
Profil *
TFSi

Aha.. tak jo, díky.
Kajman_
Profil *
Hlavní rozdíl je v intervalu rozsahu možných hodnot. Např. na datum narození lidí nemůže timestamp použít. Ten je pro datum narození souborů.
Stepanka
Profil *
Kajman_
Jasně.. já to myslela spíš z hlediska náročnosti zpracování, paměti a tak.. Zatím se mi jeví DATETIME jako přehlednější ... Ale v jiných ohledech moc zkušeností nemám..
bohyn
Profil
Stepanka
Co je lepší? Ukládat data do databáze jako 1) DATETIME, nebo 2) jako INT(11) a TIMESTAMP, čili v počtu sekund?
Ja pouzivam timestamp a na datum/cas prevadim az v aplikacni logice. Pokud potrebujes porovnavat datum v PHP je urcite lepsi timestamp (teda pokud se jedna o +/- soucasna data (1900 - 2032, rozsah 64 bit si nepamatuju)).

Kajman_
Např. na datum narození lidí nemůže timestamp použít.
Kdyz nedelas s historickymi daty neni problem.
Joker
Profil
Stepanka
Co je lepší? Ukládat data do databáze jako 1) DATETIME, nebo 2) jako INT(11) a TIMESTAMP, čili v počtu sekund?
Jak na co, ale většinou bych použil DATETIME.
Co se týká paměti, je DATETIME náročnější než INT... taky má větší rozsah hodnot.

Hlavně se mi moc nelíbí "zneužívat" pro datum číselný typ... dá se tam INT, aplikace se bude třeba 5 let vesele rozrůstat a pak tam někdo bude potřebovat zadat datum po roce 2038 a zjistí, že to nejde. Tak se předělá 32-bitový timestamp na 64-bitový a zjistí se, že se nenarve do databáze. Předělá se INT na BIGINT a zjistí se, že zas nejde něco úplně jiného, co spoléhalo na to, že v tom sloupečku je INT.
bohyn
Profil
Joker
O spolehlivost bych se az tak nebal, timestamp je nativni casovy format v PHP (C/C++) a v Unix/Linux/Mac systemech. Melo by stacit jen zvetsit sloupecek v tabulce.
Stepanka
Profil *
Mám problém.. nevěděl by někdo, co s tím?

Když jsem se hned na začátku ptala na to uložení do databáze a nakonec jsem to vyřešila řádkem
cas=UNIX_TIMESTAMP('".date("Y-m-d", strtotime($_POST['datum']))."'),
tak jsem potom zjistila, že mi to funguje doma na PHP verze 5.2.5, ale když to chci vystavit na web, který běží pod PHP verze 4.4.2, tak mi ten řádek nefunguje.. Do databáze se uloží nula.. Nevěděl by někdo, jak by to šlo spravit?

Děkuju.
Kajman_
Profil *
Co třeba rozsekat po tečkách a zpět sestavit s čárkama?
$a=split('[.-/]',$_POST['datum']);
$datum="$a[2]-$a[1]-$a[0]";
Kajman_
Profil *
A také je dobré si doma nainstalovat i takovou verzi, na které poběží ostrá verze.
Stepanka
Profil *
Kajman_
Děkuji za řešení, funguje to pěkně..

A také je dobré si doma nainstalovat i takovou verzi, na které poběží ostrá verze.
Moc se mi právě nechce shazovat verzi 5.2.5 na verzi 4.4.2..
bohyn
Profil
Stepanka
Proc to pouzivas tak slozite?
cas=".strtotime($_POST['datum']).",

respektive jestli nefunguje strtotime() tak jak pise Kajman_ rozsekat na pole
$datum = explode(".", $_POST['datum']);
cas=".mktime(0, 0, 0, $datum[1], $datum[0], $datum[2]).",

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: