Nette\Database a typ sloupce TIME
- Glottis
- Člen | 129
ahoj vsem,
da se nejak zmenit praci s time typem (mysql) v Nette\Database? narazil jsem ted na maly problem
v tabulce mam sloupec cas typu TIME – je tam jen udaj treba 12:06:31
jenze kdyz to vyberu pres nette databse tak mi z toho udela date time a musel
bych to formatovat. a to je nejvetsi problem co me trapi. nezjistim puvodni
datovy typ a nevim na co formatovat automaticky. nenapada nekoho
neco? dekuju
Glo
- Lukáš Kadlec
- Člen | 17
Zdravím,
mám s typem TIME „podobný“ problém. Může nabývat hodnoty větší než 24 hodin, což přeformátování při výběru nezkousne a skončí chybou, že DateTime neumí např. 25 hodin naparsovat. Neřešil už to někdo?
- saimons
- Člen | 293
Ja jsem to resl pres timestamp. Nak takto by to asi slo:
$time = new \DateTime();
$sekundy = $db->time->getTimestamp() - $time->getTimestamp();
A to pak uz neni problem prevest na cas v minutach. Mozna to jde nak i pomoci toho objektu DateTime, ale nepodarilo se mi to najit. Pokud nekdo zna lepsi reseni, rad ho uvitam.
- Lukáš Kadlec
- Člen | 17
Díky za odpověď, bohužel to problém neřeší… mám-li v $rows select a přes foreach procházím jednotlivé záznamy, skončí to chybou… jelikož při získání jednoho záznamu dojde k přeformátování..
- saimons
- Člen | 293
To na to prece nema vliv jestli je to ve foreach nebo ne. Pokud to potrebujes jen vypisovat tak to muzes udelat primo v template:
{foreach $rows AS $r}
{= ($r->time->getTimestamp() - $time->getTimestamp()) / 60}
{/foreach}
Pokud potrebujes pak nak naformatovat tak si na to vytvoris svuj helper
($r->time->getTimestamp() – $time->getTimestamp())|secForm
Pokud s tim casem potrebujes pracovat jete nekde tak si to muzes predpripravit
do nakeho pole treba uz v modelu. Zase pres foreach.
Editoval saimons (18. 5. 2012 13:54)
- Lukáš Kadlec
- Člen | 17
vliv to má.. chybou skončí ten foreach, řádek (data), se kterym bych mohl jakkoli pracovat, vůbec nedostanu..
- Glottis
- Člen | 129
a ja mam problem treba tady
<?php
//prochazim radky
foreach ($cdr->limit($limit, $from) as $tmp) {
$row = array();
//prochazim sloupce - jen ty ktere chci
foreach ($cols as $v) {
if ($v != "") {
//hacek, pokud to je nette datum
if ($tmp[$v] instanceof \Nette\DateTime) {
$tmp[$v] = $tmp[$v]->format('Y-m-d H:i:s');
}
$row[] = $tmp[$v];
if ($v == 'id') $row['DT_RowId'] = $tmp[$v];
}
}
$output['aaData'][] = $row;
}
?>
predavam si data z komponenty jsonem
testuju tam (lepsi nez nic), jestli jsou data instance Nette\DateTime ale je to na prd. ono to datum muze byt a taky nemusi. kdyz to je datum je to ok. kdyz je ale sloupec jen time, tak to samozrejme nezafunguje. nebo zafunguje ale misto 07:00 se mi ukaze 2012–02–02 07:00:00 a moc se mi nechce jeste definovat co je jaky sloupec za datovy typ a jak ho zobrazit. to uz je pro me lepsi si dat sloupec jako varchar ale je to skoda. kdyby DateTime vedel z ceho ten cas sparsoval, mohl by ten format pak zas pouzit
- Glottis
- Člen | 129
datetime a time je na mysql rozdilny format. do datetime mysql uklada Y-m-d H:i:s a do time jen H:i:s. s tim jak to dela nette databse je nutne time nutny konvertovat jak pri vypise tak editaci. kdyz to delam rucne pres sablony tak me to samozrejme netrapi. kdyz to delam dynamicky jsonem nebo jinak a nevim co byly data puvodne zac, je problem.