Частично отрабатывает код, в чём причина?
Выкидывай все if'ы и взгляни на часы повнимательнее...
В if'ах мало того, что ошибка в условии, так ещё и 4 значения часа исчезают.
У тебя периоды в 6 часов и 4 значения.
1) Берём текущий час, делим на 4 равные части ($time / 6). 
2) Прибавляем 1, так как у тебя счёт идет не с 00 часов, а с 18. 
3) И берём остаток от деления на 4. (утро, день и так далее...) $i = (($time / 6) + 1) % 4;
На выходе будет: time=0 i=1
time=1 i=1
time=2 i=1
time=3 i=1
time=4 i=1
time=5 i=1
time=6 i=2
time=7 i=2
time=8 i=2
time=9 i=2
time=10 i=2
time=11 i=2
time=12 i=3
time=13 i=3
time=14 i=3
time=15 i=3
time=16 i=3
time=17 i=3
time=18 i=0
time=19 i=0
time=20 i=0
time=21 i=0
time=22 i=0
time=23 i=0
time=24 i=1
код не самый читабельный, просто пилил под себя не обессудьте
ну так ты приведи код в порядок, в читабельный так сказать вид, переменные назови по-людски, а там глядишь и понимать что-то начнешь.
а то уже который по счету вопрос с этим кодом тут.
дебаггер еще попробуй, резко проясняет ход событий.