2016-10-27 1 views
0

json_encode(['date' => $dateTimeObj])의 출력을 어떻게 든 변경할 수 있습니까?json_encode의 DateTime 출력 변경

는 이제

{ 
    "date": { 
     "date": "2016-10-27 11:23:52.000000", 
     "timezone_type": 3, 
     "timezone": "Europe/Paris"  
    } 
} 

내가이

{ 
    "date": "2016-10-27T11:23:52+00:00" 
} 

내 첫번째 생각처럼 출력이 jsonSerialize을 뜻 날짜 시간을 확장 내 자신의 날짜 시간 클래스를 생성하고 무시하는 것이었다하고 싶은 인쇄,하지만 날짜 시간 않습니다 JsonSerializable 인터페이스를 구현하지 않았고 __toString도 도움이되지 못했습니다.

PHP 7.0.8을 사용하고 있습니다.

나는 내가 좋아하는 것

{ 
    "date": { 
     "date": "2016-10-27 11:23:52.000000", 
     "timezone_type": 3, 
     "timezone": "Europe/Paris"  
    } 
} 

는 몇 가지 세부 사항을 변경 한 후

{ 
    "date": "2016-10-27T11:23:52+00:00" 
} 
+0

'json_encode()'는 사용자가 지정한 데이터를 조작하지 않습니다. 객체/배열에 날짜를 넣으면보고 싶은대로 인코딩합니다. 그런 식으로 유지됩니다. 그래서 날짜를 추가하는 코드를 수정하십시오 – RiggsFolly

+0

기본적으로 ... 수동으로 문자열을'json_encode' 전에 수동으로 날짜를 포맷하십시오. – deceze

+0

@deceze 예, 아마 유일한 방법 일 것입니다. 기사, 댓글, 스레드 등의 날짜를 반환해야합니다 ... 그래서 어떻게 든 자동으로 한 곳에서 변환 할 수있을 것이라고 생각했습니다. – LiTe

답변

3

을 가지고

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

이제 출력이 코드를 이런 식으로 뭔가를 의미, 특히 인터페이스 이름, 귀하의 코드는 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"} 
+0

OMG, 나에 수치. 고맙습니다! – LiTe