Oznámení
formátování datumu
před 11 lety
- deric
- Člen | 93
Bylo by možné do dibi přidat podporu pro formátování timestamp? Různé databáze používají (h)různé řetězce pro formátování, bylo by fajn kdyby v dibi byl jednotný formát.
dibi::test('SELECT created %df', 'j.n.Y', 'AS vytvoreno FROM [products]');
Výstupem by mohlo být:
mysql:
SELECT DATE_FORMAT(created, "%e.%c.%Y") AS vytvoreno FROM `products`
postgre:
SELECT to_char(created, "FMDD.FMMM.YYYY") AS vytvoreno FROM products
Pro zadávání formátování v dibi je možné používat formát datumu z MySQL(%e.%c.%Y) nebo php(j.n.Y). Syntaxe by měla být intuitivní… ale teď mě nic lepšího nenapadá.
před 11 lety
- David Grudl
- Nette Core | 6806
Nebylo by snažší jít touto cestou?
$res = dibi::query('SELECT created FROM products');
// auto-convert column 'created' to timestamp
$res->setType('created', Dibi::FIELD_DATETIME);
foreach ($res as $row) {
// $row['created'] je unix timestamp
}
před 11 lety
- deric
- Člen | 93
Jo, to je asi obecnější, akorát trochu složitý zápis. Takže když chci vlastní formátování času, tak nějak takto?
echo date('d.m.Y', $row['created']);
toto by mi přilo hezčí :)
$res->setType('created', dibi::dateformat('d.m.Y') );
před 11 lety
- David Grudl
- Nette Core | 6806
To není špatný nápad!
před 11 lety
- Wamer
- Člen | 14
Souhlasím. Tohle by se mi velmi hodilo a ulehčilo by to práci.
před 11 lety
- David Grudl
- Nette Core | 6806
Tak v aktuální verzi jsem to vyřešil takto:
$res->setType('created', dibi::FIELD_DATETIME, 'd.m.Y');
před 11 lety
- Honza M.
- Člen | 1674
Šlo by do dibitable přidělat nějaké centrální nastavování typu sloupečku? Aby se to nemuselo řešit po každém výběru?
function __construct() {
// tohle je asi blbost, ale něco vzdáleně podobného by se mohlo hodit
$this->setType('created', dibi::FIELD_DATETIME, 'j. n. Y');
}
před 11 lety
- David Grudl
- Nette Core | 6806
Než to nějak implementuju, můžeš si pomoci sám:
class MyTable extends DibiTable
{
/**
* User DibiResult post-processing.
* @param DibiResult
* @return DibiResult
*/
protected function complete($res)
{
$res->setType('created', dibi::FIELD_DATETIME, 'j. n. Y');
return $res;
}
}
před 11 lety
- David Grudl
- Nette Core | 6806
Do DibiTable jsem přidal pole $types, pomocí něhož lze nastavovat typy
jednotlivých sloupečků. Ekvivalent zápisu
$res->setType('created', dibi::FIELD_DATETIME, 'j. n. Y');
by
vypadal takto:
class Products extends DibiTable
{
public $types = array(
'created' => array('type' => dibi::FIELD_DATETIME, 'format' =´> 'j. n. Y'),
);
}
Pokud uvedený typ nepotřebuje políčko format
, uveďte ho
s hodnotou NULL.
před 11 lety
- RaR
- Člen | 42
termineDate je int(11) a je v něm uloženo time(). Při následujícím nastavení typu mě to vrací 1.1.1970 pro všechny hodnoty. Jak to mám upravit, aby se vracel datum?
<?php
phpclass Termines extends DibiTable
{
protected $primary = 'termineId';
protected $types= array('termineDate' => array('type' => dibi::FIELD_DATETIME, 'format' => 'd.m.Y'),);
protected $blankRow = array(
'termineId' => '',
'termineDate' => '',
'terminePlace' => '',
);
}
?>
díky za radu
před 11 lety
- David Grudl
- Nette Core | 6806
Přidal jsem podporu pro timestamp do dibi, stáhni si poslední verzi.
před 11 lety
- RaR
- Člen | 42
Super, díky. Už se datum při načtení převádí podle filtru
protected $types= array('termineDate' => array('type' => dibi::FIELD_DATETIME, 'format' => 'd.m.Y'),);
jen při ukládání pomocí
$termine->update((int) $this->getParam('id'), $form->getValues());
zůstane pořád jako string.
"UPDATE `termines` SET `termineDate`='27.06.2008', `terminePlace`='Kolín', `airPrice`='520' WHERE `termineId` IN (93 )"
musím to někde převest zpět na timestamp, nebo se to dá nějak nastavit automaticky.
Editoval RaR (26. 11. 2008 9:20)