如何用php创建日期范围?

时间:2017-06-05 08:51:00

标签: php date web

我试着用PHP腾出时间。开始日期2017-01-29至2017-12-29。但那次发生的事情我无法在2月打印,因为这个月最多只有28天。如何订购打印,但二月份日期最多为28。

我的剧本:

    date_default_timezone_set('UTC');

    // Start date
    $date = '2017-01-29';
    // End date
    $end_date = '2017-12-29';

    while (strtotime($date) <= strtotime($end_date)) {
                echo "$date\n"; 
                echo "<br>";
                $date = date ("Y-m-d", strtotime("+1 month", strtotime($date)));
    } 

输出:

enter image description here

4 个答案:

答案 0 :(得分:7)

使用DateTime类查找下个月的最后一天:

date_default_timezone_set('UTC');

// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';

while (strtotime($date) <= strtotime($end_date)) {
            echo "$date\n"; 
            echo "<br>";
            $d = new DateTime( $date );
            $d->modify( 'last day of next month' );
            $date = $d->format( 'Y-m-d' );
}

现在这可能不完全是您感兴趣的内容,因为您可能想要尝试不同的开始日期,并且不要在下个月结束时使用它,或者您可能希望它使用2/28 2月的日期,但是每个月都要回到29日。但这应该让你更接近你需要的逻辑。我认为使用DateTime将是你答案的一部分。

答案 1 :(得分:2)

您可以尝试的其他方法,您不必使用DateTime

    date_default_timezone_set('UTC');

    // Start date
    $date = '2017-01-29';
    // End date
    $end_date = '2017-12-29';

    while (strtotime($date) <= strtotime($end_date)) {
        echo "$date\n"; 
        echo "<br>";
        $date = date("Y-m-t", strtotime("+30 day", strtotime($date)));
    }

使用strtotime("+30 day", strtotime($date),您可以在当前日期添加30天,并使用t获取该月的最后一个日期。

    2017-01-29 
    2017-02-28 
    2017-03-31 
    2017-04-30 
    2017-05-31 
    2017-06-30 
    2017-07-31 
    2017-08-31 
    2017-09-30 
    2017-10-31 
    2017-11-30 

答案 2 :(得分:1)

使用此

date ("Y-m-t", strtotime("+1 month", strtotime($date)));

而不是这个来获得一个月的最后一天

date ("Y-m-d", strtotime("+1 month", strtotime($date)));

答案 3 :(得分:0)

试试这段代码:

    <?php 
         $from = new DateTime;
         $to = new DateTime('+1 year');

        for($date=clone $from; $date<$to; $date->modify('+1 day')){
              echo $date->format('Y-m-d');
         }
    ?>