Вы звоните по следующему коду;
while ($data0800 = getTimeData("0800")->fetch_assoc()) {
Кажется достаточно справедливым, верно? Но каждый раз, когда цикл while вызывается, вызывается функция, что означает, что выполняется новый запрос, что, в свою очередь, означает, что он никогда не достигает конца, когда значение сбрасывается в первую найденную строку, вместо вызова функции каждый раз при цикле цикла использование следующего для отделения вызова функции от цикла должно заставить его работать так, как вы ожидаете, собирая каждую строку по очереди;
$timedata = getTimeData("0800");
while ($data0800 = $timedata->fetch_assoc()) {
Это потому, что вы вызываете свою функцию только один раз и сохраняете ее результат в переменной $timedata
, а не обновляете запрос и набор результатов каждый раз, когда проходите цикл