Почему вы не можете использовать значения из строки запроса при построении цикла for в php? - PullRequest
2 голосов
/ 06 апреля 2011

Это кажется странной проблемой для меня, но PHP кажется неспособным использовать переменную, переданную из строки запроса, при создании цикла for.

Насколько я знаю, анализ не требуется, иданные, поступающие из строки запроса, должны быть ... строкой в ​​любом случае.

Несмотря на то, что я могу распечатать значения после того, как извлек их из строки запроса, это не работает:

<code>$from = $_GET['dealfrom'];
$to = $_GET['dealto'];

$fromDate = $from;
$toDate = $to;

$dateMonthYearArr = array();
$fromDateTS = strtotime($fromDate);
$toDateTS = strtotime($toDate);

for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS += (60 * 60 * 24)) {
// use date() and $currentDateTS to format the dates in between
$currentDateStr = date("Y-m-d",$currentDateTS);
$dateMonthYearArr[] = $currentDateStr;
//print $currentDateStr.”<br />”;
}

echo  "<pre>";
print_r($dateMonthYearArr);
echo "
";

Если я установлю значения явно в строки ($ fromdate и $ todate) точно в то, что я передаю в строке запроса, то код выполняется отлично.

Является ли это ограничением PHP в некотором роде, или я просто упускаю что-то действительно очевидное?

Ответы [ 4 ]

0 голосов
/ 06 апреля 2011

Ваш код работал нормально для меня, используя $ _GET. Как и другие, я считаю, что проблема заключается в форматировании строки, получаемой из параметра $ _GET.

Я протестировал его со следующими значениями: 20.01.2011 - 30.03.2011 и получил массив для распечатки.

Убедитесь, что вы четко проанализировали, что содержится в параметре $ _GET, и мы надеемся, что strtotime () обязует.

0 голосов
/ 06 апреля 2011

var_dump() ваш лучший друг здесь.

Я уверен, что с PHP все в порядке. Кроме того, strtotime() может быть разборчивым, следите за форматированием и локалью (в США месяц и день меняются местами).

0 голосов
/ 06 апреля 2011

Сначала я запустил

<code><?
$from = "13/01/2011";
$to = "21/01/2011";

$fromDate = $from;
$toDate = $to;

echo $from."\n";
echo $to."\n";


$dateMonthYearArr = array();
$fromDateTS = strtotime($fromDate);
$toDateTS = strtotime($toDate);
echo $fromDateTS."\n";
echo $toDateTS."\n";

for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS
+= (60 * 60 * 24)) {
// use date() and $currentDateTS to format the dates in between
$currentDateStr = date("Y-m-d",$currentDateTS);
$dateMonthYearArr[] = $currentDateStr;
print $currentDateStr."\n";
//print $currentDateStr..<br />.;
}

echo  "<pre>";
print_r($dateMonthYearArr);
echo "
";?>

Я получил вывод

13/01/2011
21/01/2011
1325376000
1346454000
2012-01-01
2012-01-02
2012-01-03
2012-01-04
2012-01-05
2012-01-06
2012-01-07
2012-01-08
2012-01-09
2012-01-10
2012-01-11
2012-01-12
2012-01-13
2012-01-14
2012-01-15
2012-01-16
2012-01-17
2012-01-18
2012-01-19
2012-01-20
2012-01-21
2012-01-22
2012-01-23
2012-01-24
2012-01-25
2012-01-26
2012-01-27
2012-01-28
2012-01-29
2012-01-30
2012-01-31
2012-02-01
2012-02-02
2012-02-03
2012-02-04
2012-02-05
2012-02-06
2012-02-07
2012-02-08
2012-02-09
2012-02-10
2012-02-11
2012-02-12
2012-02-13
2012-02-14
2012-02-15
2012-02-16
2012-02-17
2012-02-18
2012-02-19
2012-02-20
2012-02-21
2012-02-22
2012-02-23
2012-02-24
2012-02-25
2012-02-26
2012-02-27

Итак, вы знаете, что, как мне показалось, сработало.

Хотя он и не дал ожидаемых данных, но, безусловно, он не проявил поведение, которое вы видели.

0 голосов
/ 06 апреля 2011
$fromDate = $from;
$toDate = $to;

date_default_timezone_set(date_default_timezone_get());
$dt = strtotime($fromDate);
$enddt = strtotime($toDate);
$dateMonthYearArr = array();
while ($dt <= $enddt) {
  $dateMonthYearArr[] = date("Y-m-d", $dt);
  $dt = strtotime('next day', $dt);
  }
...