显示两个日期之间的日期

时间:2015-05-20 08:46:52

标签: php

我有一个表单,用户应填写两个日期。我想显示这些选定日期之间的日期,如

  June 11
  June 12
  June 13
  June 14
  June 15
  Jun  16
  Jun  17

在我的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))));

$dateRange = new DatePeriod(DateTime::createFromFormat('Y-m-d',$dateTo), new DateInterval('P1D'), DateTime::createFromFormat('Y-m-d',$dateFrom));

然后在我的模板中,我尝试了

foreach $dateRange as $date {echo $date}

显示这些日期的正确方法是什么? var_dump输出如

 object(DatePeriod)[62]
 public 'start' => 
 object(DateTime)[21645]
  public 'date' => string '2015-05-20 16:56:21' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Asia/Manila' (length=11)
 public 'current' => null
 public 'end' => 
 object(DateTime)[21656]

我试过

<?php foreach($dateRange as $r):?>
<?php echo $r->format('Y-m-d') ?>
<?php endforeach ?>

但我的表格中没有显示任何内容

2 个答案:

答案 0 :(得分:1)

根据PHP文档DatePeriod实现Traversable接口。因此,您可以像使用数组一样使用它,并在其上使用它:

/** @var DateTime[] $dateRange */
$dateRange = new DatePeriod(...);

foreach($dateRange as $date) {
    $date->format(...);
}

官方PHP文档中没有提到的是你得到一个&#34;数组&#34; DateTime个对象。

答案 1 :(得分:0)

您需要使用format。 像这样:

echo $date->format("Ymd") . "<br>";