以某种方式可以改变输出json_encode(['date' => $dateTimeObj])?
现在它打印
{
"date": {
"date": "2016-10-27 11:23:52.000000",
"timezone_type": 3,
"timezone": "Europe/Paris"
}
}
Run Code Online (Sandbox Code Playgroud)
我希望有这样的输出
{
"date": "2016-10-27T11:23:52+00:00"
}
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是创建我自己的DateTime类,它将扩展DateTime并覆盖jsonSerialize,但DateTime没有实现JsonSerializable接口,而__toString也没有帮助.
我使用的是PHP 7.0.8.
我的意思是这样的
<?php
MyDateTime extends \DateTime implements jsonSerialize
{
public function jsonSerialize() // this is never called
{
return $this->format("c");
}
}
$datetime = new MyDatetime();
$output = [
'date' => $datetime; // want to avoid $datetime->format("c") or something like this everywhere
];
json_encode($output);
Run Code Online (Sandbox Code Playgroud)
此代码现在输出
{
"date": {
"date": "2016-10-27 11:23:52.000000",
"timezone_type": 3,
"timezone": "Europe/Paris"
}
}
Run Code Online (Sandbox Code Playgroud)
我想拥有
{
"date": "2016-10-27T11:23:52+00:00"
}
Run Code Online (Sandbox Code Playgroud)
Vik*_*tor 12
在更改了一些细节,特别是接口名称之后,您的代码在PHP 7.0.14上对我来说效果很好.
<?php
class MyDateTime extends \DateTime implements \JsonSerializable
{
public function jsonSerialize()
{
return $this->format("c");
}
}
$datetime = new MyDatetime();
$output = [
'date' => $datetime,
];
echo json_encode($output);
// Outputs: {"date":"2017-02-12T17:34:36+00:00"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7717 次 |
| 最近记录: |