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

Loop and Increment date from $_POST variable - PHP

已在下面的回答中解决

为我的用户创建一个调度工具,我在尝试增加从下拉列表中获得的变量时遇到问题 selection:

$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>

这个select离子表示为:

$date_select = $_POST['date_select'];

接下来,在提交之前,用户可以 select 单选按钮 - M、T、W、Th、F、Sat 或 Sun 来表明他们是否愿意将他们的请求应用到selected 天,每周,一年中剩下的时间。 (这就是我想要做的......这是:将 $date_select 增加“+1 周”直到 for 循环完成)

这个select离子表示为:

$repeat = $_POST['repeat'];

这是我得到的最接近的...例如,下面的代码会像我想要的那样为每个 "Monday" 递增...如果 $repeat == 'M',但是数字日期错了...

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/>";  
            }   

例如:如果日期 selected 是 7-4-16 星期一,输出是这样的:

11-26-07 星期一

12-3-07 星期一

12-10-07 星期一

12-17-07 星期一

12-24-07 星期一

12-31-07 星期一

1-7-08 星期一

等等...

提前谢谢你。

所以在 PHP 你必须 类 这真的很有帮助

\DateTime and \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>';  
            }  

已解决问题出在日期格式中..."m-d-Y" 不等同于 "m/d/Y" 在增加天数、周数或月数时的输出方式。在某处,"American" 日期格式值和 "European" 日期格式值混淆了。我更改了两个 for 循环中的日期格式并使其正常工作。

"Note: Be aware of dates in the m/d/y or d-m-y formats; if the separator is a slash (/), then the American m/d/y is assumed. If the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. To avoid potential errors, you should YYYY-MM-DD dates or date_create_from_format() when possible."

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/>";
            }   
}