2017-08-14 16 views
0

でページにJSONから日時を表示することができません:私は次のようなAPIから引っ張ってきたいくつかのJSONデータ持っPHP

{ 
    data: { 
    loans: { 
     totalCount: 301, 
     values: [ 
     { 
     name: "Anastacia", 
     status: "fundRaising", 
     plannedExpirationDate: "2017-08-19T22:10:06Z" 
     }, 
     { 
     name: "Mercy", 
     status: "fundRaising", 
     plannedExpirationDate: "2017-08-19T22:10:05Z" 
     } 
     ] 
    } 
    } 
} 

私は上の名前とtotalCountプロパティを表示することができていますがページには含まれていますが、予定されている予定日はありません。

$json_a = json_decode($curl_response, true); 

//This works: 
echo $json_a['data']['loans']['values'][0]['name']; 

//this does not: 
echo $json_a['data']['loans']['values'][0]['plannedExpirationDate']; 

//this does not either. It prints a date in 1970. 
$date= $json_a['data']['loans']['values'][2]['plannedExpirationDate']; 
echo date('d-m-Y H:i:s', strtotime($date)); 

答えて

0

私は、公式ドキュメントを確認し、ニーズに合ったあなたの問題はあなたがはYmdを持っているあなたのJSONファイルに日付の形式で、あなたのPHPコードと互換性があるように形式を変更、またはPHPで独自のフォーマットを作成すべきだと思います:
http://php.net/manual/en/datetime.format.php

1

DateTimeクラスは、あなたが望むものを達成するのに役立ちます偉大な代替品です。

など。

$d = new DateTime($date); 
echo $d->format('d-m-Y H:i:s'); 
+0

ありがとうございます!出来た! – Brett

+0

お手伝いいただきありがとうございます。また、Stack Overflowへようこそ。この回答または他の誰かがあなたの問題を解決した場合は、それを受け入れたものとしてマークしてください:) – Fotis

1

問題は2つの値しかないため、インデックス#2は定義されていません。あなたは、このようにコードを変更した場合、それは動作します:

$date= $json_a['data']['loans']['values'][1]['plannedExpirationDate']; 

1970日付は大きな手がかりとなる - あなたは偽Y何かを解析していることを意味します。

+0

それは私が思ったものですが、OPは「echo $ json_a ['data'] ['loans'] ['values'] [ 0] ['計画された実行日']; 'も動作しませんでした。テストケースをまとめてみるつもりです。 –

+0

私は、それは働いた。 –

+0

あなたが正しいです、使用している2つのインデックスでなければなりません –

0

誤ったインデックスを使用しているために起こっています。
これは、解析されたJSONのために、以下に示すのvarダンプ(したいインデックスは1と2ではないことに注意)ではっきりと見ることができます。適切なインデックス(と一緒にこれを行うには

array(1) { 
    ["data"]=> 
    array(1) { 
    ["loans"]=> 
    array(2) { 
     ["totalCount"]=> 
     int(301) 
     ["values"]=> 
     array(2) { 
     [0]=> 
     array(3) { 
      ["name"]=> 
      string(9) "Anastacia" 
      ["status"]=> 
      string(11) "fundRaising" 
      ["plannedExpirationDate"]=> 
      string(20) "2017-08-19T22:10:06Z" 
     } 
     [1]=> 
     array(3) { 
      ["name"]=> 
      string(5) "Mercy" 
      ["status"]=> 
      string(11) "fundRaising" 
      ["plannedExpirationDate"]=> 
      string(20) "2017-08-19T22:10:05Z" 
     } 
     } 
    } 
    } 
} 

良い方法running example):

あなたはまた、 plannedExpirationDateのために解析された値をフォーマットするために、PHPで利用可能 DateTimeクラスを使用することができます
<?php 

$json = '{ 
    "data": { 
     "loans": { 
      "totalCount": 301, 
      "values": [{ 
        "name": "Anastacia", 
        "status": "fundRaising", 
        "plannedExpirationDate": "2017-08-19T22:10:06Z" 
       }, 
       { 
        "name": "Mercy", 
        "status": "fundRaising", 
        "plannedExpirationDate": "2017-08-19T22:10:05Z" 
       } 
      ] 
     } 
    } 
}'; 


// to see the index more clerly we can use this 
//var_dump(json_decode($json, true)); 


// to check for any parsing errors 
switch (json_last_error()) { 
     case JSON_ERROR_NONE: 
      echo ' - No errors'; 
     break; 
     case JSON_ERROR_DEPTH: 
      echo ' - Maximum stack depth exceeded'; 
     break; 
     case JSON_ERROR_STATE_MISMATCH: 
      echo ' - Underflow or the modes mismatch'; 
     break; 
     case JSON_ERROR_CTRL_CHAR: 
      echo ' - Unexpected control character found'; 
     break; 
     case JSON_ERROR_SYNTAX: 
      echo ' - Syntax error, malformed JSON'; 
     break; 
     case JSON_ERROR_UTF8: 
      echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; 
     break; 
     default: 
      echo ' - Unknown error'; 
     break; 
} 

echo "\n"; 

$json_a = json_decode($json, true); 

//This works: 
echo $json_a['data']['loans']['values'][0]['name']; 
echo "\n"; 

//this does not: 
echo $json_a['data']['loans']['values'][0]['plannedExpirationDate']; 
echo "\n"; 

//this does not either. It prints a date in 1970. 
$date= $json_a['data']['loans']['values'][1]['plannedExpirationDate']; 
echo date('d-m-Y H:i:s', strtotime($date)); 

?> 

関連する問題