Цикл дат между двумя датами, используя цикл For, а затем отображать его с помощью цикла foreach в php

1

Я хочу отображать даты между двумя датами в цикле foreach. Предположим, что дата начинается 1 мая 2014 года и заканчивается 3 мая 2014 года. Я хочу показать это

//С помощью только для цикла отобразится то, что я хотел

for($i=$dateFrom;$i<=$dateTo;$i++) {
 echo $i."<br>";
 }
May 1,2014
May 2, 2014
May 3, 2014

Но этот код возвращается при использовании цикла foreach для отображения его шаблона

May 3,2014
May 3, 2014
May 3, 2014

Это мой код в action.php

$dateTo = $r->getParameter("date_to", date('Y-m-d'));
$dateFrom = $r->getParameter("date_from", date('Y-m-d', strtotime('7 days ago', strtotime($dateTo))));
$this->data=array();
foreach($this->deposits as $d) {
    $obj = new stdClass();
    $obj->created_by = $d->created_by;
    $obj->date_created = $d->date_created;
  for($i =$dateFrom;$i <= $dateTo;$i++) {
    $date=$i;//I think the problem is here.I am not sure how to make this work
  }
  $obj->amount = $d->amount;
  $obj->dateCovered = $date;
  $this->data[] = $obj;
}

template.php

<?php foreach ($data as $i => $d): ?>
        <tr class="<?php echo ($i%2==0)?'even':'odd' ?>">
            <td><?php echo $d->id ?></td>   
            <td>
            <?php echo $d->dateCovered ?>//this will display the last date only
            </td>
            <td>
                <?php $amountTotal += $d->amount ?>
                PHP <?php echo number_format($d->amount, 2) ?>
            </td>
            <td><?php echo $d->created_by ?></td>
            <td><?php echo date("F d, Y",strtotime($d->date_created)) ?></td>
        </tr>
    <?php endforeach ?>

Моя проблема здесь в том, что она не отображает все даты между двумя датами. Вместо этого будет отображаться только последняя дата между двумя датами. Что не так с этим кодом?

Теги:

2 ответа

2
Лучший ответ

вы можете это сделать

$date_from = strtotime("1 May 2015");
$date_to = strtotime("15 May 2015");

$oneDay = 60*60*24;

for($i=$date_from; $i<=$date_to; $i=$i+$oneDay)
{
    echo date("F j, Y", $i) . "<br>";
}

Теперь вы можете попробовать с этим..

$dateTo = $r->getParameter("date_to", date('Y-m-d'));
$dateFrom = $r->getParameter("date_from", date('Y-m-d', strtotime('7 days ago', strtotime($dateTo))));

$oneDay = 60*60*24;
$date_time = strtotime($dateFrom);

$this->data=array();
foreach($this->deposits as $d) {
    $obj = new stdClass();
    $obj->created_by = $d->created_by;
    $obj->date_created = $d->date_created;

    $date= date("F j, Y", $date_time);
    $date_time += $oneDay;
    $obj->amount = $d->amount;
    $obj->dateCovered = $date;
   $this->data[] = $obj;
}
  • 0
    хорошо, что это будет работать, но у меня есть шаблон, который будет вызывать action.php. Использование цикла foreach. Любая идея? Я попробовал ваш код, но он всегда будет отображать последнюю дату вместо всех дат между двумя датами
  • 0
    Пожалуйста, попробуйте со 2-й частью
Показать ещё 1 комментарий
0
<?php
$date_from = strtotime("10 September 2000");
$date_to = strtotime("15 September 2000");


$day_passed = ($date_to - $date_from); //seconds
$day_passed = ($day_passed/86400); //days

$counter = 1;
$day_to_display = $date_from;
while($counter < $day_passed){
    $day_to_display += 86400;
    echo date("F j, Y \n", $day_to_display);
    $counter++;
}
?>
  • 0
    да, я знаю, что ваш код работает, но я хочу сделать это на основе моего кода в action.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню