Striktní datum a čas v Nette Utils
- David Grudl
- Nette Core | 8227
Na práce s daty v PHP mě vždycky nesmírně štval „overflow mechanism“, tedy že funkce akceptují třeba datum 33. ledna a tiše jej převedou na 2. února. Na první pohled to může vypadat užitečně, ale ve skutečnosti je to pouze zdroj nepříjemností. Může se stát, že někde omylem vyplníte datum třeba 31. dubna, což na první pohled vůbec nevypadá jako chyba, protože kdo si hned uvědomí, že duben má jen 30 dní, a systém to akceptuje a tiše změní na 1. května. To je přesně to, co nikdy nechcete.
Ještě divnější chování má konstruktor DateTime:
new DateTime('2023-04-31') -> převede na 2023-05-01
new DateTime('2023-04-32') -> vyhodí výjimku
Teprve nedávno jsem přišel na to, jak se dá overflow mechanism detekovat a vyhodit výjimku i v prvním případě.
Toto chování bych chtěl doplnit do Nette\Utils\DateTime.
Existuje ale jedna situace, která se na overflow spoléhá. Taky je to teda
blbě. Jde o data 0000-00-00
v MySQL. Takové datum neexistuje a
když se konvertuje na DateTime, převede se tiše na -0001-11-30
.
Chci proto upravit Nette\Database, aby v takovém případě místo objektu
DateTime vracel NULL.
- kminekmatej
- Generous Backer | 38
Odstranení tichého převodu na –0001–11–30 bude mít pozitivní dopad na můj anger management, tedy za mě jednoznačný +1