Autor Zpráva
quatzael
Profil
Když mám v databázi defaultně záznam u datumu 0000-00-00, tak si s ním funkce date() neví nějak rady.
echo date('d.m.Y', strtotime($db['datum']));
Místo, aby očekávaně vygenerovala: 00.00.0000 tak tam hodí tenhle nesmysl: 30.11.-0001

Je tam někde chyba??
Tori
Profil
quatzael:
Místo, aby očekávaně vygenerovala: 00.00.0000
Očekávané by mělo být spíš "01.01.1970", ne? Příčina je zřejmě v tom, že od ver. 5.1.0 strtotime při chybě (jako např. neplatné datum "0000-00-00") vrací FALSE, ale ve starších verzích vracela -1. To se převede v date korektně na rok -1. Proč listopad, netuším.
edit: je to jinak, viz můj další post.
Jan Tvrdík
Profil
quatzael:
Když mám v databázi defaultně záznam u datumu 0000-00-00
Tak to máš špatně, správné řešení je mít tam NULL. Datum 0000-00-00 ani 00.00.0000 neexistuje, takže jakákoliv práce s ním jako s datem nedává z principu (že to není datum) smysl.
quatzael
Profil
Jan Tvrdík:
Tam mám teda nějak nastavit defaultně hodnotu NULL přímo v tý dabázi nebo kontrolovat proměnný před tím, jestli náhodou samy obsahují nějaké datum?

Protože to jsou všechno hodnoty z inputů a ta hodnota 0000-00-00 pochází z nevyplněných inputů (které správně mají zůstat nevyplněné)
ts_istudio
Profil
quatzael:
Testuj přímo $db['datum']. Když bude "0000-00-00", vypiš něco jako "datum nevyplněno" a nějakým date a strtotime se vůbec nezabývej.
Tori
Profil
quatzael:
Jinak pokud používáte nulové hodnoty pro neznámou část data (např. 2013-05-00 = někdy v květnu), tak by asi bylo spolehlivější s tím pracovat jako s řetězcem (explodovat na jednotlivé části), než převádět na unix timestamp (strtotime chápe 2013-05-00 jako "den před 2013-05-01", tedy 2013-04-30. Proto se taky 0000-00-00 převedlo na 30.11.-1).
quatzael
Profil
Tori:
Proto se taky 0000-00-00 převedlo na 30.11.-1
Aha..

Nulové hodnoty pro neznámé části data nepoužívám. Prostě buď je v inputu vyplněné cele datum nebo je tento input vynechán..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0