按周递增日期


Increment through date on week basis

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

如果当前日期=2013年7月22日,也就是星期一,那么我必须将其增加到星期三(可用=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->表dept的主键$db->查询($sq);->query用于获取给定的值,并在程序文件夹中另一个名为database.php的文件中定义。表dept中描述from_time和to_time的f_time和t_time->字段。f_time是我们必须开始增量的时间,t_time是结束该增量的时间。

请告诉我我给出的代码是否有任何改进。

您可以做的事情如下:

你说你想增加多少天。并给出可用的数组。

<?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过程来重现它。

据我所知,你正在追求类似的东西

UPDATE sometable
    SET some_date_column = some_date_column + ('1 day'::INTERVAL * some_integer_value);