Как составить список дат в формате yyyy_mm с PHP с помощью цикла? - PullRequest
1 голос
/ 10 октября 2011

Какой самый чистый способ использовать цикл в PHP для перечисления дат следующим образом?

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

Ключевые элементы здесь:

  • Должно быть как можно проще- Я бы предпочел один цикл for вместо двух.
  • Должен указывать дату этого месяца в качестве первой и останавливаться на фиксированной точке (2009-11)
  • Не должен прерываться вБудущее (например, вычитание 30-дневного количества секунд, вероятно, сработает, но в конечном итоге сломается, поскольку в каждом месяце нет точного количества секунд)

Пришлось внести несколько изменений в решение:1014 *

    // 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";
    }

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Может быть, этот маленький код делает вещь?: более сложные ситуации.

    <?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)));
        }

 ?>

Кредит предоставляется: http://www.if -not-true-then-false.com / 2009 / php-loop-through-date-from-date-актуальный-с-StrToTime-функции /

0 голосов
/ 10 октября 2011

PHP 5.3 представляет некоторые большие улучшения в обработке даты / времени в PHP.Например, first day of, DateInterval и DatePeriod используются ниже.

$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;
}
0 голосов
/ 10 октября 2011

Это то, что я догадываюсь о твоей просьбе, потому что это не имеет смысла ......

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...