2015-05-19 3 views
2

ниже мой PHP-код, чтобы отобразить все даты между двумя dates..but не работает должным образом ...Как напечатать все дни между двумя датами

fromdate = 20-04-2015 
todate = 25-05-2015 

мой код отображение только 20,21,22,23,24,25

но Мне нужны все дни между этими двумя месяцами.

ожидаемого выход

20-04 21-04 22-04 23-04 24-04 25-04 26-04 27-04 28-04 ......upto 25-05 

ниже мой код ..

<?php 
    $startdate = $_POST['fromdate']; 
    $enddate = $_POST['todate']; 
    $start = date('d', strtotime($startdate)); 
    $end=date('d', strtotime($enddate)); 
    ?> 

    <?php for ($x = $start; $x <= $end; $x++) { ?> 
     <th width="58%"><?php echo $x; ?></th> 
     <?php } ?> 

ответ

5

Использование strtotime() и date() для пересекающих даты не рекомендуется, потому что это хак в лучшем случае. Используйте DateTime итерировать даты вместо:

$start = new DateTime('20-04-2015'); 
$end  = (new DateTime('25-05-2015'))->modify('+1 day'); 
$interval = new DateInterval('P1D'); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $dt) { 
    echo $dt->format("d-m") . "<br>\n"; 
} 

Demo

Для PHP < 5,4 (echo phpversion();), который не поддерживает array dereferencing:

Demo

Приведенный выше код создает объекты для DateTime дату начала и окончания. Мы должны добавить один день до конца, так как он не будет включен в наш цикл позже. Затем он создает объект DateInterval для представления приращения в один день и объекта DatePeriod, чтобы содержать все это. Затем он перебирает каждую дату и выделяет дату в ожидаемом формате.

+0

Вау, такие хорошие объяснения, к сожалению, довольно редко встречаются на SO. * Love it! * – Rizier123

+0

Ошибка синтаксиса: неожиданный T_OBJECT_OPERATOR в $ end = (новый DateTime ('25 -05-2015 ')) -> изменить (' + 1 день '); –

+0

Какую версию PHP вы используете? –

Смежные вопросы