<?php
date_default_timezone_set("Asia/Shanghai");
/*
$day = date("d");
$month = date("m");
$year = date("Y");
*/
$day = 25;
$month = 12;
$year = 2011;
for($i=0; $i<10; $i++){
$day = date("d", mktime(0, 0, 0, $month, $day, $year));
$month = date("m", mktime(0, 0, 0, $month, $day, $year));
$year = date("Y", mktime(0, 0, 0, $month, $day, $year));
var_dump($day);
var_dump($month);
var_dump($year);
echo "<br/>";
$day++;
}
?>
结果输出这样:string '25' (length=2)string '12' (length=2)string '2011' (length=4)string '26' (length=2)string '12' (length=2)string '2011' (length=4)string '27' (length=2)string '12' (length=2)string '2011' (length=4)string '28' (length=2)string '12' (length=2)string '2011' (length=4)string '29' (length=2)string '12' (length=2)string '2011' (length=4)string '30' (length=2)string '12' (length=2)string '2011' (length=4)string '31' (length=2)string '12' (length=2)string '2011' (length=4)string '01' (length=2)string '12' (length=2)string '2011' (length=4)string '02' (length=2)string '12' (length=2)string '2011' (length=4)string '03' (length=2)string '12' (length=2)string '2011' (length=4)我看http://www.w3school.com.cn/php/func_date_mktime.asp,里面说mktime() 函数对于日期运算和验证非常有用。它可以自动校正越界的输入,而且我使用下面这段
<?php
date_default_timezone_set("Asia/Shanghai");
var_dump(date("Y-m-d H:i:s", mktime(0, 0, 0, 13, 35, 2011)));
?>
也确实可以得到正确结果啊,string '2012-02-04 00:00:00' (length=19)
但是为什么放在循环里面就不行呢。

解决方案 »

  1.   


        $day = 25;
        $month = 12;
        $year = 2011;
        for($i=0; $i<10; $i++){        
            $day = date("d", mktime(0, 0, 0, $month, $day, $year));
            $month = date("m", mktime(0, 0, 0, $month, $day, $year));
            $year = date("Y", mktime(0, 0, 0, $month, $day, $year));    
            var_dump($day);
            var_dump($month);
            var_dump($year);
            echo "<br/>";        
            $day++; 
            if($day>31){
             $month++;
             $year++ ;
            }
                
        }
    输出:
    string(2) "25" string(2) "12" string(4) "2011"
    string(2) "26" string(2) "12" string(4) "2011"
    string(2) "27" string(2) "12" string(4) "2011"
    string(2) "28" string(2) "12" string(4) "2011"
    string(2) "29" string(2) "12" string(4) "2011"
    string(2) "30" string(2) "12" string(4) "2011"
    string(2) "31" string(2) "12" string(4) "2011"
    string(2) "01" string(2) "01" string(4) "2012"
    string(2) "02" string(2) "01" string(4) "2012"
    string(2) "03" string(2) "01" string(4) "2012" 
      

  2.   

            $day = date("d", mktime(0, 0, 0, $month, $day, $year));当2011-12-32
    输出$day=1, 但$month没有输出,就没有改变,仍然是12下一句
            $month = date("m", mktime(0, 0, 0, $month, $day, $year));这里实际上是$month = date("m", mktime(0, 0, 0, 12, 1, $year));
      

  3.   


    原来是这样,谢谢啦,改正后成这样
    <?php
    date_default_timezone_set("Asia/Shanghai");
    /*
    $day = date("d");
    $month = date("m");
    $year = date("Y");
    */
    $day = 25;
    $month = 12;
    $year = 2011;
    for($i=0; $i<10; $i++){
    $str_date = date("Y-m-d", mktime(0, 0, 0, $month, $day, $year));
    $arr_date = explode("-", $str_date);
    $year = $arr_date[0];
    $month = $arr_date[1];
    $day = $arr_date[2];
    var_dump($day);
    var_dump($month);
    var_dump($year);
    echo "<br/>";
    $day++;
    }
    ?>
      

  4.   

        date_default_timezone_set("Asia/Shanghai");    
        /*
        $day = date("d");
        $month = date("m");
        $year = date("Y");
        */
        $day = 25;
        $month = 12;
        $year = 2011;
        for($i=0; $i<10; $i++){        
            $day1 = date("d", mktime(0, 0, 0, $month, $day, $year));
            $month1 = date("m", mktime(0, 0, 0, $month, $day, $year));
            $year1 = date("Y", mktime(0, 0, 0, $month, $day, $year));    
            var_dump($day1);
            var_dump($month1);
            var_dump($year1);
            echo "<br/>";        
            $day++;        
        }