Упорядочение по дате и времени по возрастанию с оператором космического корабля (я переупорядочил ваши исходные данные, потому что они выглядели уже отсортированными):
<?php
$json=<<<JSON
[
{
"Id": 170,
"ClassDate": "2019-09-21T00:00:00",
"StartTime": "08:45:00"
},
{
"Id": 14,
"ClassDate": "2019-09-20T00:00:00",
"StartTime": "06:00:00"
},
{
"Id": 144,
"ClassDate": "2019-09-21T00:00:00",
"StartTime": "05:00:00"
},
{
"Id": 27,
"ClassDate": "2019-09-20T00:00:00",
"StartTime": "07:45:00"
}
]
JSON;
$data = json_decode($json, true);
function cmp($a, $b) {
$a_date = $a['ClassDate'];
$b_date = $b['ClassDate'];
$a_time = $a['StartTime'];
$b_time = $b['StartTime'];
$cmp = $a_date <=> $b_date;
if($cmp === 0)
$cmp = $a_time <=> $b_time;
return $cmp;
}
usort($data, "cmp");
var_export($data);
Вывод:
array (
0 =>
array (
'Id' => 14,
'ClassDate' => '2019-09-20T00:00:00',
'StartTime' => '06:00:00',
),
1 =>
array (
'Id' => 27,
'ClassDate' => '2019-09-20T00:00:00',
'StartTime' => '07:45:00',
),
2 =>
array (
'Id' => 144,
'ClassDate' => '2019-09-21T00:00:00',
'StartTime' => '05:00:00',
),
3 =>
array (
'Id' => 170,
'ClassDate' => '2019-09-21T00:00:00',
'StartTime' => '08:45:00',
),
)