2013-09-25 2 views
0

У меня возникла проблема, когда я хочу показывать день за днем ​​с интервалом дат.Как показать все дни с интервала дат HTML PHP

Что я имею в виду, что у меня есть простой вид:

<form method="post" action=""> 
From Date1: <input type="text" name="date1" value="<!--10 days ago date (2013-09-14)-->"/> 
<br> 
To Date2: <input type="text" name="date2" value="<!--today's date (2013-09-24)-->"/> 
<input type="submit" value="Change interval"/> 
</form> 

Из этой формы я получаю две даты, и я хотел бы показать все дни между тем, как это:

| 2013-09-14 

| 2013-09-15 

| 2013-09-16 

| 2013-09-17 

| . 

| . 

| 2013-09-24 

И если возможно, сохраните все эти даты в массиве или переменной.

Надеюсь, вы можете мне помочь. Спасибо вам.

+0

можно отправить сообщение, если вы попробуете –

ответ

3
$start = new DateTime('2013-09-01'); 
$end  = new DateTime('2013-09-30'); 
$interval = new DateInterval('P1D'); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $dt) 
{ 
    echo $dt->format("Y-m-d") . PHP_EOL; 
} 

See it in action

Специально для вашего использование:

$dates = array(); 
$start = new DateTime($_POST['date1']); 
$end  = new DateTime($_POST['date2']); 
$interval = new DateInterval('P1D'); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $dt) 
{ 
    $dates[] = $dt->format("Y-m-d"); 
} 
+0

Thi s - намного лучший ответ, чем то, что я предоставил. Благодаря! +1 –

1

Попробуйте, думаю, что я получил его от PHP.net лет назад, извините, не лучше ссылку ссылку ...

function dates_array($start, $end) { 
    $range = array(); 

    if (is_string($start) === true) $start = strtotime($start); 
    if (is_string($end) === true) $end = strtotime($end); 

    do { 
     $range[] = date('Y-m-d', $start); 
     $start = strtotime("+ 1 day", $start); 
    } 
    while($start <= $end); 

    return $range; 
} 
Смежные вопросы