Ваш json не очень-то понятен. Не ясно, откуда берётся дата вложенных сообщений. Но то, что вам нужно, делается примерно так:
\date_default_timezone_set('Europe/Moscow');
$json = '{
"meta": {
"p": 273876598,
"a": 370637443,
"t": "Сообшение 1",
"d": 1485679498
},
"data": [
{
"i": 56645,
"f": 370637443,
"t": "Сообшение 2",
"d": 346934331
},
{
"i": 56644,
"f": 370637443,
"t": "Сообшение 3",
"d": 346934327
}
]
}';
$arr = \json_decode($json, true);
$html = '';
foreach ($arr as $key => $val) {
if (isset($val['t']) && isset($val['d'])) {
$date = \date('d.m.y H:i', $val['d']);
$html .= "<p>{$val['t']}<br>$date</p>";
} else {
foreach ($val as $key2 => $val2) {
if (isset($val2['t']) && isset($val2['d'])) {
$date = \date('d.m.y H:i', $val2['t']);
$html .= "<p>{$val2['t']}<br>$date</p>";
}
}
}
}
echo $html;