Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用PHP在页面上显示json中的日期时间_Php_Json_Date_Datetime_Strtotime - Fatal编程技术网

无法使用PHP在页面上显示json中的日期时间

无法使用PHP在页面上显示json中的日期时间,php,json,date,datetime,strtotime,Php,Json,Date,Datetime,Strtotime,我从api中提取了一些JSON数据,如下所示: { data: { loans: { totalCount: 301, values: [ { name: "Anastacia", status: "fundRaising", plannedExpirationDate: "2017-08-19T22:10:06Z" }, { name: "Merc

我从api中提取了一些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"
        }
      ]
    }
  }
} 
我可以在页面上显示姓名和总数,但不能显示plannedExpirationDate

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

我认为您的问题在于json文件中的日期格式您有Y-m-d,您应该更改格式以与PHP代码兼容,或者根据需要在PHP中创建自己的格式查看官方文档:

我认为您的问题在于json文件中的日期格式您有Y-m-d,您应该更改格式以与PHP代码兼容,或者根据需要在PHP中创建自己的格式查看官方文档:

这门课是一个很好的替代品,它将帮助你实现你的愿望

例如

这门课是一个很好的替代品,它将帮助你实现你的愿望

例如


问题是只有两个值,因此索引#2未定义。如果您将代码更改为此,它将工作:

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

1970年的日期是一条重要线索——这意味着你正在解析一个假y。

问题是只有两个值,所以索引#2没有定义。如果您将代码更改为此,它将工作:

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

1970年的日期是一条重要线索——这意味着你正在分析一些错误的东西。

这是因为你使用了不正确的索引。
这可以在下面显示的解析JSON的var转储中清楚地看到(请注意,您想要的索引是1而不是2):

更好的方法是使用适当的索引():



您还可以使用php中可用的类为
plannedExpirationDate

设置解析值的格式,因为您使用的索引不正确。
这可以在下面显示的解析JSON的var转储中清楚地看到(请注意,您想要的索引是1而不是2):

更好的方法是使用适当的索引():



您还可以使用php中可用的类来格式化
plannedExpirationDate

的解析值,这也是我的想法,但是OP说
echo$json_a['data']['loans']['values'][0]['plannedExpirationDate']也不起作用。我将尝试组合一个测试用例。我也是这么想的,但OP说,
echo$json_a['data']['loans']['values'][0]['plannedExpirationDate']也不起作用。我将尝试组合一个测试用例。很乐意提供帮助,欢迎使用Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受:)乐意帮助,欢迎使用Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受:)
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"
        }
      }
    }
  }
}
<?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));

?>