为什么这个for循环不能用于迭代unix时间?

时间:2012-03-26 15:45:34

标签: php time

我正在尝试用时间填充选择列表。

我想创建选择列表,使其从开始日期开始,然后在六个月后结束。

我现在已经为循环创建了这个但它不起作用:     $ dateSelectList ='';     $ startDate = $ c-> getStartDate(92);

$endDate = intval( strtotime('+6 month', $startdate) );
$i = 1;

$tempDate = 0;
for($date = $startdate; $date <= $endDate ; $date = strtotime('+1 day', $date))
{
    $dateSelectList .= '<option id="select'.$i.'" value="'.$date.'">'.$date.'</option>';
    $i++;
}
$dateSelectList .= '</select>';

我认为这是for循环中的最后一个字段,但我不知道如何绕过它。

我已将其更改为$date = strtotime('+1 day', $date),现在可以使用了。

非常感谢!

3 个答案:

答案 0 :(得分:1)

在每次迭代中,您将日期重置为开始日期加一天。即,您只是在每次迭代中使用相同的日期:

for($date = $startdate; $date <= $endDate ; $date = strtotime('+1 day', $startdate))

更改你的for循环,以便它继续添加到$ date:

for($date = $startdate; $date <= $endDate ; $date = strtotime('+1 day', $date))

答案 1 :(得分:1)

有很多解决方案。其中一个可能是:

代码

$startdate = time(); // today;
$enddate = strtotime('+6 months', $startdate);

while ($startdate <= $enddate) {
  echo date('Y-m-d', $startdate) . "<br/>";
  $startdate = strtotime('+1 day', $startdate);
  }

输出

2012-03-26
2012-03-27
2012-03-28
2012-03-29
2012-03-30
2012-03-31
2012-04-01
...
2012-09-24
2012-09-25
2012-09-26

现在,根据需要修改代码并创建选择器。

将第一行更改为

$year = 2012;
$month = 3;
$day = 26;

$startdate = strtotime("$year-$month-$day 00:00:00 UTC");

并创建自定义 $ startdate

完成选择器代码

$year = 2012;
$month = 2;
$day = 3;

$startdate = strtotime("$year-$month-$day 00:00:00 UTC");
$enddate = strtotime('+6 months', $startdate);

$doc = "<select>"; $i=1;
while ($startdate <= $enddate) {
  $dt = date('Y-m-d', $startdate);
  $doc .= "<option id=\"select$i\" value=\"$dt\">$dt</option>";
  $startdate = strtotime('+1 day', $startdate);
  $i++;
  }
$doc .= "</select>";

echo $doc;

输出

enter image description here

更优雅的解决方案是将其全部投入到这样的功能中

function createSelector($day, $month, $year) {
  $startdate = strtotime("$year-$month-$day 00:00:00 UTC");
  $enddate = strtotime('+6 months', $startdate);
  $doc = "<select>"; $i=1;
    while ($startdate <= $enddate) {
    $dt = date('Y-m-d', $startdate);
    $doc .= "<option id=\"select$i\" value=\"$dt\">$dt</option>";
    $startdate = strtotime('+1 day', $startdate);
    $i++;
    }
  $doc .= "</select>";
  return $doc;
  }

并以这种方式称呼

$selectorCode = createSelector(26, 3, 2012);
echo $selectorCode;

干杯!

答案 2 :(得分:0)

问题确实在于这段代码:$date = strtotime('+1 day', $startdate) ...

$startdate永远不会被更改,因此,$date永远不会被更改。您需要更像$date = strtotime('+1 day', $date)的内容才能使循环正常工作。