2013-06-23 5 views
-1

Я хочу вернуть все дни между определенным диапазоном.
Моя идея состояла в том, чтобы преобразовать начальную и конечную дату для Отметка времени Unix и перебрать их добавления 86400 (секунд в день):Цитирование через дни

<?php 
    $start = strtotime('2013-01-01'); 
    $end = strtotime('2013-02-01'); 

    for($i=$start; $i<=$end; $i+86400) 
    { 
    echo date("l, d.m.y", $i) . "\n"; 
    } 
?> 

К сожалению, я только получаю один и тот же день:

Tuesday, 01.01.13 
Tuesday, 01.01.13 
Tuesday, 01.01.13 
... 
+0

Неверный оператор. Попробуйте '$ i + = 86400' вместо' $ i + 86400'. И пока вы на нем, переключитесь на [Объекты DateTime] (http://us.php.net/manual/en/datetime.add.php) и явно добавьте «1 день» вместо «86400 секунд». – DCoder

+0

@DCoder ['DatePeriod'] (http://php.net/dateperiod) был создан именно для этого типа задач. – salathe

+1

Если вы хотите присвоить какое-то значение, вам нужен оператор assignemnt: http://www.php.net/language.operators.assignment - и если вы хотите что-то повторить, вы должны пройти через трафик, например http: // php .net/dateperiod;) - Также позаботьтесь о том, чтобы не все дни имели 86400 секунд. Просто говорю, не то, чтобы вы так думали. – hakre

ответ

5

Это неправильно:

for($i=$start; $i<=$end; $i+86400) 

должен быть

for($i=$start; $i<=$end; $i+=86400) 

Обратите внимание: += insetad + вашего исходного кода. В вашем коде вы не присвоили новое значение переменной, просто выполните математическую формулу без результата

+0

в виде примечания $ i + = 86400 - это сокращенный код для $ i = $ i + 86400 – exussum

+0

Примечание: это вызовет проблемы при переходе с standrd time на летнее время или наоборот или при добавлении секунд прыжка или тому подобное, лучше использовать подход salathe – johannes

7

Лучшей практикой является использование класса DatePeriod.

$start = new DateTime('2013-01-01'); 
$end = new DateTime('2013-02-01'); 

foreach (new DatePeriod($start, new DateInterval('P1D'), $end) as $date) { 
    echo $date->format("l, d.m.y\n"); 
} 
+0

У вас также есть '$ next_day = strtotime ('+ 1 day', $ current_stamp)', если вы не хотите использовать 'DatePeriod', но согласились с тем, что' DatePeriod' - лучшая практика. – bnlucas