Насколько я понимаю вашу проблему, вы хотите вычесть 7 часов из даты / времени, если результат не находится в интервале 23: 00-05: 00, тогда нужно вычесть еще 6 часов. Я бы предложил сделать что-то вроде этого:
<?php
$array = array(
new DateTime('2012-01-24 13:00'),
new DateTime('2012-01-24 06:00'),
new DateTime('2012-01-24 05:59'),
new DateTime('2012-01-24 08:42'),
new DateTime('2012-01-24 12:00'),
new DateTime('2012-01-24 11:59'),
new DateTime('2012-01-24 06:33')
);
foreach($array as $a) {
$a->modify("-7 hours");
if(($a->format('H') + 1) < 6) {
$a->modify("-6 hours");
}
echo $a->format('Y-m-d H:i') . "\n";
}
?>
Это должно вывести
2012-01-24 06:00
2012-01-23 17:00
2012-01-23 22:59
2012-01-23 19:42
2012-01-24 05:00
2012-01-24 22:59
2012-01-23 17:33
EDIT
Вы также можете сделать однострочник в цикле
foreach($array as $a) {
echo $a->modify((($a->format('H') + 1) < 6) ? '-13 hours' : '-7 hours')->format('Y-m-d H:i') . "\n";
}