Nette\Database a typ sloupce TIME

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

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

vliv to má.. chybou skončí ten foreach, řádek (data), se kterym bych mohl jakkoli pracovat, vůbec nedostanu..

Glottis
Člen | 129
+
0
-

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

saimons
Člen | 293
+
0
-

Spatne jsem pochopil co vlastne nefunguje. Ale spis ted vubec nechapu v cem je problem? Pokud je to v DB time tak se do datetime vlozi soucasne datum na serveru. Tak pres format() si to muzu vypsat jak chci ne?

Glottis
Člen | 129
+
0
-

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.