2

我正在使用 pgsql 作为后端构建一个 php 应用程序。我想将日期增加一些日期 shich 应该从我的数据库中加载,这些日期的值是可用的=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 -> 表 dept 的主键 $db->query($sq); -> 查询用于获取给定的值,并在程序文件夹中名为 database.php 的另一个文件中定义。f_time 和 t_time -> 表 dept 中描述 from_time 和 to_time 的字段。f_time 是我们必须开始增量的时间,t_time 是结束此增量的时间。

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

4

2 回答 2

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

于 2013-07-22T12:09:54.733 回答
0

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

UPDATE sometable
    SET some_date_column = some_date_column + ('1 day'::INTERVAL * some_integer_value);
于 2013-07-22T15:27:26.367 回答