Autor | Zpráva | ||
---|---|---|---|
Stepanka Profil * |
#1 · Zasláno: 13. 1. 2009, 11:45:14
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 * |
#2 · Zasláno: 13. 1. 2009, 12:06:10
Tak už nic, už se mi to povedlo s: cas=UNIX_TIMESTAMP('".date("Y-m-d", strtotime($_POST['datum']))."'),
|
||
Stepanka Profil * |
#3 · Zasláno: 13. 1. 2009, 14:04:20
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 |
#4 · Zasláno: 13. 1. 2009, 14:26:36
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 * |
#5 · Zasláno: 13. 1. 2009, 14:37:19
TFSi
Aha.. tak jo, díky. |
||
Kajman_ Profil * |
#6 · Zasláno: 13. 1. 2009, 14:45:52
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 * |
#7 · Zasláno: 13. 1. 2009, 14:54:24
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 |
#8 · Zasláno: 13. 1. 2009, 15:11:43
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 |
#9 · Zasláno: 13. 1. 2009, 15:51:11
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 |
#10 · Zasláno: 13. 1. 2009, 15:57:55
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 * |
#11 · Zasláno: 13. 1. 2009, 22:33:19
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']))."'), Děkuju. |
||
Kajman_ Profil * |
#12 · Zasláno: 13. 1. 2009, 22:38:15
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 * |
#13 · Zasláno: 13. 1. 2009, 22:38:53
A také je dobré si doma nainstalovat i takovou verzi, na které poběží ostrá verze.
|
||
Stepanka Profil * |
#14 · Zasláno: 13. 1. 2009, 22:57:30
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 |
#15 · Zasláno: 13. 1. 2009, 22:59:08
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]).", |
||
Časová prodleva: 15 let
|
0