来自 $_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 你必须 类 这真的很有帮助
所以做你想做的我会推荐
$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/>";
}
}
已在下面的回答中解决
为我的用户创建一个调度工具,我在尝试增加从下拉列表中获得的变量时遇到问题 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 你必须 类 这真的很有帮助
所以做你想做的我会推荐
$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/>";
}
}