Почему это не работает в цикле для перебора времени Unix? - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь заполнить выбранный список временем.

Я хочу создать список выбора так, чтобы он начинался с начальной даты, а затем заканчивался через шесть месяцев.

Я создал цикл for, но он не работает: $ 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 ]

1 голос
/ 26 марта 2012

В каждой итерации вы сбрасываете дату на начальную дату плюс один день.То есть, вы просто используете одну и ту же дату снова и снова на каждой итерации:

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

Измените цикл for, чтобы он продолжал добавлять к $ date вместо этого:

for($date = $startdate; $date <= $endDate ; $date = strtotime('+1 day', $date))
1 голос
/ 26 марта 2012

Существует множество решений. Один из них может быть:

код

$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;

Ура!

0 голосов
/ 26 марта 2012

Проблема, действительно, с этим битом кода: $date = strtotime('+1 day', $startdate) ...

$startdate никогда не изменяется, поэтому $date никогда не изменяется. Вам нужно что-то более похожее на $date = strtotime('+1 day', $date), чтобы цикл работал правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...