function test($time1,$time2){
     .............
}给两个时间:起始日期和终止日期,比如2008-12-25   2009-01-10,求一函数,把它的月数列出来,要可以跨年。
例如:test( strtotime('2008-10-25'), strtotime('2009-03-10'));
得出下面结果:
2008-10-25至2008-10-31   
2008-11-01至2008-11-30  
2008-12-01至2008-12-31    
2009-01-01至2009-01-31  
2009-02-01至2009-02-28
2009-03-01至2009-03-10

解决方案 »

  1.   

    <?php
    function test($time1, $time2) {
    $stamp1 = strtotime($time1);
    $stamp2 = strtotime($time2);
    $resStamp = $stamp2 - $stamp1;
    $resArr = explode("-", date("Y-m-d", $resStamp));
    $res['year'] = $resArr[0] - 1970;
    $res['month'] = $resArr[1];
    $res['day'] = $resArr[2];
    return $res;
    }
    echo "<pre>";
    var_dump(test("2008-10-25", "2008-10-31"));
    ?>array(3) {
      ["year"]=>
      int(0)
      ["month"]=>
      string(2) "01"
      ["day"]=>
      string(2) "07"
    }
      

  2.   

    好吧。。刚才不够仔细
    这样就可以了<?php
    function test($time1, $time2) {
    $stamp1 = strtotime($time1);
    $stamp2 = strtotime($time2);
    $resStamp = $stamp2 - $stamp1;
    $resArr = explode("-", date("Y-m-d", $resStamp));
    $res['year'] = $resArr[0] - 1970;
    $res['month'] = $resArr[1] - 1;
    $res['day'] = $resArr[2] - 1;
    return $res;
    }
    echo "<pre>";
    var_dump(test("2008-10-25", "2008-10-29"));
    ?>
      

  3.   

    //lz再简化简化,我就按着思路写下去,没优化。
    function test($time1,$time2){
        $t = $time1;
        if(substr($t,0,7) == substr($time2,0,7))
        {
    $c[] = $time1." - ".$time2;
    return $c;
    }
        while($t < $time2)
        {
         $st = strtotime($t);
    if($t == $time1)
    {
    $c[] = $t." - ".date("Y-m-".date("t",$st),$st);
    }
    else
    {
    $firstDay = date("Y-m-01",$st);
    $c[] = $firstDay." - ".substr($firstDay,0,7)."-".date("t",$st);
    }
    $t = date("Y-m-d",strtotime("{$t} +1 month"));
    }
    if(substr($t,0,7) != substr($time2,0,7))
    {
    $cc = count($c)-1;
    $c[$cc] = date("Y-m-01",strtotime($t." -1 month"))." - ".$time2;
    }
    else
    {
    $c[] = date("Y-m-01",strtotime($t))." - ".$time2;
    }
    return $c;

    echo "<pre/>";
    print_r(test('2008-10-25','2009-03-10'));