这个方法不是很好,但是可以解决你的问题
还有那个55是我硬写的,因为我用100来算,你那个60里的15我想不出怎么转成100里的55
将就着用吧,我测试过,可以用<?php$d1 = "08:00";
$d2 = "22:00";
$d11 = eregi_replace(":", "", $d1);  //把时间格式转成数字
$d12 = $d11+100;  //第1个数字+100作为“-”号后的第2个数字
$d22 = eregi_replace(":", "", $d2);
while ($d12<=$d22){
        $d13 = $d12-55;
        if (strlen($d13)<4){      //这里考虑到如果是0900-55的话会变成845,而我要的效果是
            if (strlen($d11)<4){  //0845,所以加了个判断,如果字符串长度<4,就在头上加个0
               $d11 = "0".$d11;
               $d13 = "0".$d13;
            }
            else
               $d13 = "0".$d13;
        }
        echo substr($d11, 0, 2) . ":" . substr($d11, 2, 2) . "-" . substr($d13, 0, 2) . ":" . substr($d13, 2, 2) . "<br>";  //转回日期格式
        $d11 = $d11+100;
        $d12 = $d12+100;
}?>

解决方案 »

  1.   

    <?php
    $d1 = '08:00';
    $d2 = '22:00';
    $h = 60;
    $d3 = 15;//回调函数
    function foo($r) {
      return $r[1]*60+$r[2];
    }
    //转换时:分格式到分
    $d1 = preg_replace_callback("/(\d+):(\d+)/","foo",$d1);
    $d2 = preg_replace_callback("/(\d+):(\d+)/","foo",$d2);
    //循环输出
    for($i=$d1;$i<$d2;$i+=$h) {
      printf("%02d:%02d - %02d:%02d<br>",floor($i/60),$i%60,floor(($i+$h-$d3)/60),($i+$h-$d3)%60);
    }
    ?>