在下面的回答中解决
为我的用户创建一个计划工具,我在尝试增加从下拉列表选择中获取的变量时出现问题:
$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
等等......
提前谢谢。
答案 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上,您必须使用真正有用的类
所以要做你想做的事我会推荐
$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>';
}