来自$ _POST变量的循环和递增日期 - PHP

时间:2016-06-29 20:37:11

标签: php date variables for-loop increment

在下面的回答中解决

为我的用户创建一个计划工具,我在尝试增加从下拉列表选择中获取的变量时出现问题:

$date_select = $_POST['date_select'];

我确定这是一本教科书修复,但简单地说就是......我需要将$ date_select增加+1周,持续52周。

我有一个从当前日期开始的下拉菜单,循环到365天结束,递增1.这里没问题。

<select name="date_select" form="create_schedule">
<?php 
for($i = 0; $i <= 365; $i++){
$d=strtotime($i . " Day");
$day = date("n-j-y l", $d) . "<br>";
echo "<option>" . $day . "</option>";
}
?>
</select>

此选择由以下表示:

$date_select = $_POST['date_select'];

接下来,在提交之前,用户可以选择一个单选按钮--M,T,W,Th,F,Sat或Sun,以指示他们是否愿意将他们的请求应用于所选择的那一天,每周,今年剩下的时间。 (这是我正在尝试做的...这是:将$ date_select增加“+1周”直到for循环结束)

此选择由以下表示:

$repeat = $_POST['repeat'];

这是我得到的最接近的...下面的代码为每个“星期一”递增,就像我想要的那样...如果$ repeat =='M',但数字日期是错误的...... < / p>

if(isset($_POST['repeat'])){
        for($i = 0; $i <= 52; $i++){
            $date = strtotime($i . " week", strtotime($date_select));
            echo date("n-j-y l", $date) . "<br/>";  
            }   

例如:如果选择的日期是星期一7-4-16,则输出为:

周一11-26-07

周一12-3-07

周一12-10-07

周一12-17-07

周一12-24-07

星期一12-31-07

周一1-7-08

等等......

提前谢谢。

2 个答案:

答案 0 :(得分:1)

已解决问题以日期格式出现......“m-d-Y”相当于“m / d / Y”,相对于输出方式增加数周或数月。在某些地方,“美国”日期格式值和“欧洲”日期格式值混合在一起。我在两个for循环中更改了日期格式并使其正常工作。

“注意:请注意m / d / y或dmy格式中的日期;如果分隔符是斜杠(/),则假设为美国m / d / y。如果分隔符为破折号( - )或点(。),然后假设欧洲dmy格式。为避免潜在的错误,你应该尽可能YYYY-MM-DD日期或date_create_from_format()。“

http://www.w3schools.com/php/func_date_strtotime.asp

如果有人试图做类似的事情,这是工作解决方案

<select name="date_select" form="create_schedule">
<?php 
for($i = 0; $i <= 365; $i++){
$d=strtotime($i . " Day");
$day = date("m/d/Y l", $d) . "<br>";
echo "<option>" . $day . "</option>";
}
?>
</select>

if(isset($_POST['repeat'])){
  $repeat = $_POST['repeat'];
  echo "<br/>";
        for($i = 0; $i <= 13; $i++){        
            $d=strtotime($i . " week", strtotime($date_select));
            echo date("m/d/Y l", $d) . "<br/>";
            }   
}

答案 1 :(得分:0)

因此,在PHP上,您必须使用真正有用的类

\DateTime\DateInterval

所以要做你想做的事我会推荐

$firstDate = \DateTime::createFromFormat('Y-m-d', $date_select));
$baseDate = clone $firstDate;
$intervalToAdd = new \DateInterval('P1w')
if(isset($_POST['repeat'])){
        for($i = 0; $i <= 52; $i++){
            $date [$i] = $baseDate->add($intervalToAdd);
            echo '<option>'.$date[$i]->format('Y-m-d').'</option>';  
            }