2014-02-15 4 views
0

У меня есть этот PHP-код, который я использую для отключения jquery ui datepicker диапазона дат в календаре. Он выбирает каждую дату в заданном диапазоне и эхо-сигнал. Проблема заключается в том, что она только повторяет одну из/в диапазоне, но мне нужно, что для каждого из/в колонку:Получить диапазон дат для нескольких от/до дат

$a = "select from_date,to_date from ads"; 

$rez = mysql_query($a) or die(mysql_error()); 
$c = mysql_num_rows($rez); 

while ($re = mysql_fetch_array($rez)) 
{ 
    $from = $re["from_date"]; 
    $to = $re["to_date"]; 
} 
$start=strtotime($from); 
$s=date("Y-m-d",$start); 
$diff = abs(strtotime($to) - strtotime($s)); 


$yrs = floor($diff/(365*60*60*24)); 
$mnth = floor(($diff - $yrs * 365*60*60*24)/(30*60*60*24)); 
$days = floor(($diff - $yrs * 365*60*60*24 - $mnth*30*60*60*24)/ (60*60*24)); 
$t=1; 



$count = 0; 
while($t <= $days){ 
if ($count++ > 0) echo ", "; 
echo(json_encode($s)); 
$date = strtotime("+1 day", strtotime($s)); 
$s=date("Y-m-d", $date); 
$t++; 
} 
+1

'from' и' to' являются зарезервированными словами в 'MYSQL'. Поэтому заключите его в обратные ссылки на ваш запрос. –

+0

его перевести, чтобы понять лучше. я изменю его :) – jakob

+0

использовать mysqli или pdo. Не использовать mysql extension его лишенный –

ответ

0

Вы получаете каждый столбец, но вы перезапись каждый и левый с последним выбранным. Вы должны собрать массив своих результатов, а затем перебрать их. Я не уверен на 100%, что вы собираетесь делать, но что-то вроде этого:

$result = array(); 
while ($re = mysql_fetch_array($rez)) 
{ 
    $from_date = $re["from_date"]; 
    $to_date = $re["to_date"]; 
    $start=strtotime($from); 
    $s=date("Y-m-d",$start); 
    $result[] = array($to_date, $s); 
    ## Each element of $result is an array with two elements 
    ## So $result[0][0] is the first to_date 
} 

## Now loop over each $result and process the to_date and $s value 

foreach($result as $re){ 
    //echo $re[0] .' is this result\'s $to_date value'; 
    //echo $re[1] .' is this result\'s $s value'; 
    $to_date = $re[0]; 
    $s = $re[1]; 

    $diff = abs(strtotime($to_date) - strtotime($s)); 


    $yrs = floor($diff/(365*60*60*24)); 
    $mnth = floor(($diff - $yrs * 365*60*60*24)/(30*60*60*24)); 
    $days = floor(($diff - $yrs * 365*60*60*24 - $mnth*30*60*60*24)/ (60*60*24)); 
    $t=1; 

    $count = 0; 
    while($t <= $days){ 
     if ($count++ > 0) echo ", "; 
     echo(json_encode($s)); 
     $date = strtotime("+1 day", strtotime($s)); 
     $s=date("Y-m-d", $date); 
     $t++; 
    } 
} 
+0

Спасибо, но я получаю некоторые странные результаты. Мне нужно повторять все с/по дате и все даты между ними. Это то, что я получаю, хе $ s эхом отозвано http://pastebin.com/chkPDLnE, и это фактические даты с вашим эхом. Http://pastebin.com/QSv3fkgw – jakob

+0

эхо будет выдавать только первую и последнюю дату; Я только что исправил ошибку в моем коде выше, где я изменил '$ to' на' $ to_date', я думаю, что он будет делать то, что вы ожидаете сейчас ... –

Смежные вопросы