JSON encode \Nette\Utils\DateTime
- Blujacker
- Člen | 89
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
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
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
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;
}