Я запускаю с даты 2010-05-01
и окончание 2010-05-10
. Как я могу выполнить итерации через все те даты в PHP?
Требуется 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 .
Преобразование в метки времени 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, для защиты от дни пропускаются или повторяются.
$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);