按周计算增量

时间:2013-07-22 11:47:50

标签: php postgresql

我正在构建一个使用pgsql作为后端的php应用程序。 我想将日期增加一些日期,应该从我的数据库中加载,这些日期的值已经可用= 1,3,5(暗示星期一,星期三,一周的星期五)。我想增加这些日期值到当前日期。我在date()函数中使用N格式将一周中的天数值表示为1到7,它存储在数据库的可用字段中

如果当前日期= 22-07-2013这是星期一,那么我必须将此增加到星期三(可用= 3)然后再到周五(可用= 5)然后到下周的星期一。

等等...... 但我不能那样做.. 我需要这样一个代码,其中可用的值可能会根据该元组中的元组而改变。所以我想根据可用值增加当前日期。 所以请帮助我实现它。

我使用的代码附在此处。请看一下。

<?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 - &gt;表部门的主键 $ DB-&GT;查询($ SQ); - &GT; query用于获取给定值,并在程序文件夹中名为database.php的另一个文件中定义。 f_time和t_time - &gt;表dept中描述from_time和to_time.f_time的字段是我们必须开始递增的时间,t_time是结束此增量的时间。

请告知我我所提供的代码是否有任何改进。

2 个答案:

答案 0 :(得分: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过程重现它。

答案 1 :(得分:0)

据我所知,你是在追求

之类的东西
UPDATE sometable
    SET some_date_column = some_date_column + ('1 day'::INTERVAL * some_integer_value);