Невозможно отобразить DateTime из json на странице с переполнением стека

У меня есть некоторые данные JSON, которые я извлек из API, который выглядит следующим образом:

{
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

Решение

DateTime класс является отличной заменой, которая поможет вам достичь того, что вы хотите.

например.

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

Другие решения

Проблема в том, что есть только два значения, поэтому индекс № 2 не определен. Если вы измените свой код на это, он будет работать:

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

Свидание 1970 года — большая подсказка — это означает, что вы разбираете что-то ложное.

1

Я думаю, что ваша проблема в формате даты в вашем json-файле Y-m-d, вы должны изменить формат, чтобы он был совместим с вашим кодом PHP, или создать свой собственный формат в PHP, соответствующий вашим потребностям, проверьте официальную документацию:
http://php.net/manual/en/datetime.format.php

0

Это происходит потому, что вы используете неверный индекс.
Это хорошо видно по дампу var, показанному ниже для проанализированного JSON (обратите внимание, что индекс, который вам нужен, равен 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"}
}
}
}
}

Лучший способ сделать это вместе с правильным индексом (пример выполнения):

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

?>

Вы также можете использовать DateTime класс доступен в php для форматирования проанализированного значения для plannedExpirationDate,

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector