How to list dates in yyyy_mm format with PHP using a loop?

80

What's the cleanest way to use a loop in PHP to list dates in the following way?

2011_10
2011_09
2011_08
2011_07
2011_06
...
2010_03
2009_02
2009_01
2009_12
2009_11

The key elements here:

  • Should be as simple as possible - I would prefer one for loop instead of two.
  • Should list this month's date as the first date, and should stop at a fixed point (2009-11)
  • Should not break in the future (eg: subtracting 30 days worth of seconds will probably work but will eventually break as there are not an exact amount of seconds on each month)

Had to make a few tweaks to the solution:

    // Set timezone
    date_default_timezone_set('UTC');

    // Start date
    $date = date('Y').'-'.date('m').'-01';
    // End date
    $end_date = '2009-1-1';

    while (strtotime($date) >= strtotime($end_date))
    {
        $date = date ("Y-m-d", strtotime("-1 month", strtotime($date)));
        echo substr($date,0,7);
        echo "\n";
    }
197

Answer

Solution:

Maybe this little code does the thing? : more complicated situations.

    <?php
        // Set timezone
        date_default_timezone_set('UTC');

        // Start date
        $date = '2009-12-06';
        // End date
        $end_date = '2020-12-31';

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

 ?>

The credit goes to: http://www.if-not-true-then-false.com/2009/php-loop-through-dates-from-date-to-date-with-strtotime-function/

603

Answer

Solution:

This is what im guessing your asking for cause it doesnt really make sense......

$startmonth = date("m");
$endmonth = 7;
$startyear = date("Y");
$endyear = 2012;

//First for loop to loop threw years
for($i=$startyear; $i<=$endyear; $i++, $startmonth=0) {
    //Second for loop to loop threw months
    for($o=$startmonth; $o<=12; $o++) {
        //If statement to check and throw stop when at limits
        if($i == $endyear && $o <= $endmonth)
            echo $i."_".$o."<br/>";
        else
            break;
    }
}

Will output:
2012_0
2012_1
2012_2
2012_3
2012_4
2012_5
2012_6
2012_7
256

Answer

Solution:

PHP 5.3 introduces some great improvements to date/time processing in PHP. For example, thefirst day of,DateInterval andDatePeriod being used below.

$start    = new DateTime('first day of this month');
$end      = new DateTime('2009-11-01');
$interval = new DateInterval('P1M');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $date) {
    echo $date->format('Y_m') . PHP_EOL;
}

People are also looking for solutions to the problem: linux - Create a thumbnail preview of documents (PDF, DOC, XLS, etc.) in PHP (LAMP)

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.