Datum ‚0000–00–00‘ se mi vypisuje v inputu jako ‚-0001–11–30‘

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Brchaň
Člen | 13
+
0
-

Poslední nette 2.0.7 na PHP5.3.
Uložím záznam do db, je to prázdné datum, teakže se správně uloží jako ‚0000–00–00‘. Potom jej vytáhnu znovu do formuláře pro editaci a mám tam nesmyslný ‚-0001–11–30‘. Kdyby to byla hodina, tak hledám v nastavení časové zóny, ale proč je tam o měsíc méně? Máte někdo tušení, kde může být chyba?

Hlídám si to podmínkou ($hodnota > ‚0000–00–00‘) a funguje, ale ještě jsem to neviděl. Ostatní datumy jako ‚2013–01–04‘ se mi nijak neposunují.

Nox
Člen | 378
+
0
-

Protože rok 0 ani měsíc 0 ani den 0 neexistují (a ta podmínka není dobrý způsob, řetězcové porovnání … jako datum se správně porovnávají jen instance DateTime, případně inty jako unix timestamp).

Pokud má být v jakémkoli typu záznamu prázdná hodnota, má se použít NULL, který je na takovou skutečnost přesně určený. Jak na straně PHP, tak na straně databáze.

Editoval Nox (1. 1. 2013 15:51)

paranoiq
Backer | 392
+
0
-

použij NULL – viz výše.

a aby někoho takové blbosti jako ukládat ‚0000–00–00‘ už nenapadaly, tak navrhuji v databázi nastavit trochu striktnější režim: http://dev.mysql.com/…ql-mode.html#…