2013-07-22 5 views
1

Я создаю приложение php, используя pgsql в качестве его задней части. Я хотел бы увеличить дату на некоторый период времени shich должен быть загружен из моей базы данных, которые дали значение как доступно = 1,3,5 (подразумевая понедельник, среду, пятницу недели). Я хотел бы увеличить их доступные значения до текущей даты. Я использую функцию N в функции date() для представления значений дней в неделю как 1-7, которые хранятся в доступном поле в базе данныхПрирост на дату на основе недели

Если текущая дата = 22-07-2013, то есть в понедельник, то я должен увеличить это до среды (доступно = 3), а затем до пятницы (доступно = 5), а затем до понедельника следующей недели.

И так далее .. но я не могу сделать .. я нахожусь в необходимости такого кода, где значение доступно может меняться в зависимости от кортежей в этом tuple.So я хотел бы, чтобы увеличить текущую дату основанный на стоимости доступных. Так что, пожалуйста, помогите мне достичь этого.

Код, который я использовал, прилагается. Пожалуйста, посмотрите на него.

<?php 
$sq   = "SELECT * FROM $db->db_schema.dept where active='Y' and dept_id=$dept_id"; 
$result  = $db->query($sq); 
$ftime=$result[0]['f_time']; 
$ttime=$result[0]['t_time']; 
$a=date('Y-m-d').$ftime; 
$b=date('Y-m-d').$ttime; 
$to_time = strtotime("$b"); 
$from_time = strtotime("$a"); 
$minutes= round(abs($to_time - $from_time)/60,2). " minute"; 
$days=array(); 
$days= explode("," , $result[0]['available']); 
$result[0]['available']; 
$intl=$result[0]['slot_interval']; 
$slots=$minutes/$intl; 
$dt1 =date("m/d/Y $ftime "); 
$s_mnts=explode(":",$ftime); 

$m= date('N'); 

-- $dt=array(); 
$a=$dt1; 
$l=0; 
for($n=1;$n<=3;$n++) 
{ 

    for($k=$m;$k<=7;$k++) 
    { $l=$l+1; 
     if(in_array($m,$days)) 
     { 
     echo "dasdsa"; 
     echo date("Y-m-d H:i:s", strtotime("$a +$l days")); 
     echo"<br>"; 
     } 
      $m=$m+1; 

     if($m==7){$m=1;} 
    } 
} 
?> 

где dept_id -> первичный ключ таблицы отдела $ db-> запрос ($ кв); -> используется для получения данных значений и определяется в другом файле с именем database.php в папке программы. f_time и t_time -> поля в таблице, которые описывают from_time и to_time.f_time, время, из которого мы должны начинать приращение, и t_time - это время, чтобы положить конец этому приращению.

Пожалуйста, сообщите мне, есть ли какие-либо улучшения в коде, который я дал. ,

+0

Мы не хотели бы тратить свое время, так что, если вы могли бы объяснить, какие функции вы пробовали до сих пор, и как они не работают, то мы может быть не заставило вас повторить все те вещи, которые вы уже пробовали – Anigel

ответ

0

Что вы могли бы сделать что-то вроде этого:

Вы говорите, сколько дней вы хотите увеличить. И дайте массив доступных.

<?php 
$inicialDate = time(); //Timestamp of the date that you are based on 
$tmpDate  = $inicialDate; //Copy values for tmp var 
$increment = 5; //Increment five days 
$available = [1,3,5]; //Days available 
/*Ok, now the logic*/ 
while($increment > 0){ 
    $tmpDate = strtotime("+1 day", $tmpDate); //Increase tmpdate by one day 
    if(in_array(date("N",$tmpDate), $available){ //If this day is one of the availables 
      $increment--; 
    } 
} 
$finalDate = date("m/d/Y",$tmpDate); 
?> 

Эта логика должна работать, хотя я не знаю, как ее воспроизвести с помощью процедуры SQL.

0

Из того, что я могу сказать, вы после что-то вроде

UPDATE sometable 
    SET some_date_column = some_date_column + ('1 day'::INTERVAL * some_integer_value); 
Смежные вопросы