У меня есть 2 даты в PHP, как я могу выполнить цикл foreach для прохождения через всех тех дней?

Я запускаю с даты 2010-05-01 и окончание 2010-05-10. Как я могу выполнить итерации через все те даты в PHP?

185
задан Eric Leschinski 10 February 2017 в 04:18
поделиться

3 ответа

Требуется PHP5.3:

$begin = new DateTime('2010-05-01');
$end = new DateTime('2010-05-10');

$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);

foreach ($period as $dt) {
    echo $dt->format("l Y-m-d H:i:s\n");
}

Это выведет все дни за определенный период между $ start и $ end . Если вы хотите включить 10-е, установите для $ end значение 11-е. Вы можете настроить формат по своему вкусу. См. Руководство по PHP для DatePeriod .

489
ответ дан 23 November 2019 в 05:50
поделиться

Преобразование в метки времени unix упрощает вычисление даты в php:

$startTime = strtotime( '2010-05-01 12:00' );
$endTime = strtotime( '2010-05-10 12:00' );

// Loop between timestamps, 24 hours at a time
for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
  $thisDate = date( 'Y-m-d', $i ); // 2010-05-01, 2010-05-02, etc
}

При использовании PHP с часовым поясом, имеющим летнее время, не забудьте добавить время, отличное от 23:00, 00:00 или 1:00, для защиты от дни пропускаются или повторяются.

35
ответ дан 23 November 2019 в 05:50
поделиться
$startTime = strtotime('2010-05-01'); 
$endTime = strtotime('2010-05-10'); 

// Loop between timestamps, 1 day at a time 
$i = 1;
do {
   $newTime = strtotime('+'.$i++.' days',$startTime); 
   echo $newTime;
} while ($newTime < $endTime);

или

$startTime = strtotime('2010-05-01'); 
$endTime = strtotime('2010-05-10'); 

// Loop between timestamps, 1 day at a time 
do {
   $startTime = strtotime('+1 day',$startTime); 
   echo $startTime;
} while ($startTime < $endTime);
14
ответ дан 23 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: