Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 4 lety

deric
Člen
Registrovaný: 7. 6. 2006
Příspěvky: 111

formátování datumu

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á.

 

#2 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: formátování datumu

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
}

 

#3 před 4 lety

deric
Člen
Registrovaný: 7. 6. 2006
Příspěvky: 111

Re: formátování datumu

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') );

 

#4 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: formátování datumu

To není špatný nápad!

 

#5 před 4 lety

Wamer
Člen
Registrovaný: 2. 4. 2008
Příspěvky: 15

Re: formátování datumu

Souhlasím. Tohle by se mi velmi hodilo a ulehčilo by to práci.

 

#6 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: formátování datumu

Tak v aktuální verzi jsem to vyřešil takto:

$res->setType('created', dibi::FIELD_DATETIME, 'd.m.Y');

 

#7 před 4 lety

Honza M.
Moderator
Registrovaný: 31. 3. 2007
Příspěvky: 1632

Re: formátování datumu

Š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');
}

 

#8 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: formátování datumu

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;
        }
}

 

#9 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: formátování datumu

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.

 

#10 před 3 lety

RaR
Člen
Registrovaný: 18. 11. 2008
Příspěvky: 47

Re: formátování datumu

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

 

#11 před 3 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: formátování datumu

Přidal jsem podporu pro timestamp do dibi, stáhni si poslední verzi.

 

#12 před 3 lety

RaR
Člen
Registrovaný: 18. 11. 2008
Příspěvky: 47

Re: formátování datumu

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)

 

Zápatí