Oznámení
Dibi a autodetekce typů – formatovani casu
před 7 lety
- llsm
- Člen | 122
Zdravim, do ted jsem pouzival v dibi autodetekci casovych formatu. A ted me trochu prekvapilo, ze rozlisuje jen date, datetime a timestamp. Hodilo by se mi k nemu pridat i Time. Dibi totiz jinak Time prevede na dateTime a zobrazuje cas s aktualnim datem. Koukal jsem, ze se po tom nekdo pidil v dobe, kdy toto rozlisovani typů byla novinka, ale asi to zapadlo…
před 7 lety
- Milo
- Nette Core | 1119
Nepomůže si nastavit formát na H:i:s
?
před 7 lety
- llsm
- Člen | 122
Tak pravdepodobne to tak skonci, ale je takove slabsi, ze ma clovek v databazi time, dibi z toho udela datetime a ten pak budu zase zpet formatovat jen na time. Ale rozhodne to pro me neni nejaky zasadni problem…
před 7 lety
- David Grudl
- Nette Core | 6806
Je to kvůli tomu, že PHP žádný objekt reprezentující čas nativně nemá.
před 7 lety
- llsm
- Člen | 122
David Grudl napsal(a):
Je to kvůli tomu, že PHP žádný objekt reprezentující čas nativně nemá.
Chápu, ale neměla by se databázová vrstva řídit možnostmi databáze a ne prostředků, které využívá?
před 7 lety
- Milo
- Nette Core | 1119
llsm napsal(a):
David Grudl napsal(a):
Je to kvůli tomu, že PHP žádný objekt reprezentující čas nativně nemá.
Chápu, ale neměla by se databázová vrstva řídit možnostmi databáze a ne prostředků, které využívá?
Já bych možná převod samotného času bez datumu na DateTime úplně odstranil a nechal ho jako string. Stejně jde ve výsledku (resp. jsem nikdy nic jiného nepotřeboval) jen o formátování na HHH:MM:SS a to databáze dodá sama.
Ostatně to lze udělat i ručně
$result->setType('colName', dibi::STRING)
.
před 7 lety
- David Grudl
- Nette Core | 6806
To není tak úplně pravda, někdo preferuje zápis 10:00 p.m.
,
někdo 22:00
a někdo 22.00
.
před 7 lety
- jahudka
- Člen | 66
Zdravím vespolek,
vau, teda ohnout si dibi aniž by člověk sáhnul přímo do jejího kódu spíš víc nejde než jde se mi zdá…
Narazil jsem na tuhle podivnost s „TIME“ sloupcema a po přečtení tohohle threadu jsem si říkal: jo, škoda že PHP nemá žádnou nativní knihovnu na práci s časem (bez data). A pak si říkám: no tak si ji napíšu. Jak řekl, tak učinil, a pak až mě napadlo se podívat, jestli to dibi dokážu nějak vnutit.
Ve zkratce: abych mohl profiltrovat jeden datovej typ trošku jinak než to normálně dělá dibi, musím podědit DibiConnection, DibiResult a DibiColumnInfo.
Ale jinak mám dibi opravdu rád :o) a doteď jsem jí takovouhle kulišárnu nikdy neprovedl! ^_^
EDIT: Aha, a stejně jsem s tímhle nahranej, protože přinejlepším dokážu to, že mi dibi na moje TIME nebude sahat, ale obalit si ho svou vlastní třídičkou už budu pak muset zase manuálně… :o/ tyjo to je ale nahouby… nemáte někdo nějaký zázračný řešení?
Editoval jahudka (29. 9. 2012 4:04)
před 7 lety
- jahudka
- Člen | 66
A jeste jsem narazil na jednu vec ktera mi prijde podivna:
Vkladani casu do DB pomoci modifikatoru %t se snazi vzdycky vlozit kompletni datum a cas – i kdyz treba vlozim string „HH:MM“, dibi si ho prevede na DateTime a ten pak zformatuje jako YYYY-MM-DD HH:MM:SS. Tak si nejsem uplne jistej co pak udela MySQL kdyz do „TIME“ sloupce chci vkladat cely „DateTime“ – nejspis to funguje, ale chova se to opravdu 100% tak jak ma?
Osobne bych navrhoval oddelit date, time a datetime uplne a nabidnout nejakou moznost nastavit jak se s tim ma pracovat.. tak jak ted jde nastavit vlastni formaty pro date a datetime, ale idealne by myslim mohlo jit nastavit jako „format“ i callback, kterej by to filtrovani mohl obstarat a na jeho vystup uz nesahat.. a pak mit treba modifikator %d na date, %t na time a %dt na datetime (nebo neco jako %d, %ti a %t kvuli zpetny kompatibilite).
Neco bych napsal, ale jednak nedelam s gitem, takze nevim jak udelat pullrequest (ani poradne nevim jestli to co bych mel udelat je pullrequest) a hlavne si nejsem uplne jistej jestli bych dokazal navrhnout dostatecne kvalitni a obecny reseni..