JSON encode \Nette\Utils\DateTime

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

Zdravim,

pracuji na API zalozene na Nette, odpovedi vracim jako JSON. Vse funguje krasne, az na vraceni \Nette\Utils\DateTime, to se do JSONu zakoduje jako

some_date => array (3)
    date => "2015-05-02 00:00:00.000000" (26)
    timezone_type => 3
    timezone => "Europe/Prague" (13)

Co jsem pochopil, tak json encoduje vsechny public parametry. Slo by nejak dosahnout toho, aby se DateTime seriazoval jako prosty string (2015-05-02 00:00:00)

Dekuji za Vase rady!

newPOPE
Člen | 648
+
0
-

Kasli na to a posielaj to tam napr. naformatovanym datetime-om http://php.net/…datetime.php#… alebo len ako timestamp (ten nie je zatazeny casovou zonou).

Blujacker
Člen | 89
+
0
-

Jo, v idealnim pripade bych to tak delal, ale vracim dost casto jeonm to co vytahnu z db ($database->query()->fetch()), to vraci DateTime a moc by se mi nechtelo osetrovat ktere pole se maji preformatovat rucne.

Nebo je nejaka moznost jak donutit Nette database aby vracela neco jineho?

Blujacker
Člen | 89
+
0
-

Nakonec vyreseno takto:

private function replaceDateTime($data){
    foreach($data as $k => $v){
        if (is_array($v) or $v instanceof \Nette\Database\Row){
            $data[$k] = $this->replaceDateTime($v);
        } else if ($v instanceof \DateTime){
            $data[$k] = $v->format("y-m-d h:m:s");
        }
    }
    return $data;
}
David Grudl
Nette Core | 8239
+
+2
-

Podpora pro JSON je v masteru https://github.com/…6387133ced8f