测距日期等于今天的日期
Ranging date equal to today date
询问 php 中的日期函数
我想在一周(周一至周六)中设置一个日期范围,该日期在下拉选项中等于今天的日期。假设今天是 8 月 16 日,那么范围将在 8 月 15 日至 8 月 20 日、8 月 22 日至 27 日、8 月 29 日至 9 月 3 日开始,依此类推。
我使用这个语法
<?php
for ($i = 0; $i < 8; $i++) {
echo '<option value="'.date("Ymd", strtotime("$i weeks monday")).'">'.date("d F", strtotime("$i weeks monday"))." - ".date("d F", strtotime("$i weeks saturday")).'</option>';
}
}
?>
它只在星期一完美运行,但第二天当我打开网页时,所有选项都显示下周星期一。好像周一过去了,那个周一不在本周的列表中,下周一就变成了本周的周一。这是 strtotime 的错误,还是有更好的 strtotime 语法可供使用?如果可能的话,我想避免使用 if 来检查日期,但如果不是,那么在 strtotime 中是否可以使用任何可能的简单语法?
这很难用 strtotime()
做到,而且作为单行更是如此。不过,使用 DateTime()
and it's related classes 可以使这变得简单。
$start = new DateTimeImmutable('Monday this week');
$end = $start->add(new DateInterval('P8W'));
$interval = new DateInterval('P1W');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $week) {
$monday = $week->format('Ymd');
$saturday = $week->modify('next Saturday')->format('Ymd');
printf('<option value="%s">%s - %s</option>', $monday, $monday, $saturday);
}
这里发生的事情是:
- 使用
DateTimeImmutable()
创建我们的开始日期,即本周的星期一
- 将我们的结束日期设置为从现在起 8 周(使用
DateInterval()
)
- 将循环的间隔设置为一周时间
- 将其全部放入我们可以迭代的
DatePeriod()
对象中
- 获取星期一约会的格式
- 获取星期六约会的格式
- 在
<option>
标签中回显它(使用 printf()
所以它在我们的代码中更具可读性)
询问 php 中的日期函数 我想在一周(周一至周六)中设置一个日期范围,该日期在下拉选项中等于今天的日期。假设今天是 8 月 16 日,那么范围将在 8 月 15 日至 8 月 20 日、8 月 22 日至 27 日、8 月 29 日至 9 月 3 日开始,依此类推。
我使用这个语法
<?php
for ($i = 0; $i < 8; $i++) {
echo '<option value="'.date("Ymd", strtotime("$i weeks monday")).'">'.date("d F", strtotime("$i weeks monday"))." - ".date("d F", strtotime("$i weeks saturday")).'</option>';
}
}
?>
它只在星期一完美运行,但第二天当我打开网页时,所有选项都显示下周星期一。好像周一过去了,那个周一不在本周的列表中,下周一就变成了本周的周一。这是 strtotime 的错误,还是有更好的 strtotime 语法可供使用?如果可能的话,我想避免使用 if 来检查日期,但如果不是,那么在 strtotime 中是否可以使用任何可能的简单语法?
这很难用 strtotime()
做到,而且作为单行更是如此。不过,使用 DateTime()
and it's related classes 可以使这变得简单。
$start = new DateTimeImmutable('Monday this week');
$end = $start->add(new DateInterval('P8W'));
$interval = new DateInterval('P1W');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $week) {
$monday = $week->format('Ymd');
$saturday = $week->modify('next Saturday')->format('Ymd');
printf('<option value="%s">%s - %s</option>', $monday, $monday, $saturday);
}
这里发生的事情是:
- 使用
DateTimeImmutable()
创建我们的开始日期,即本周的星期一 - 将我们的结束日期设置为从现在起 8 周(使用
DateInterval()
) - 将循环的间隔设置为一周时间
- 将其全部放入我们可以迭代的
DatePeriod()
对象中 - 获取星期一约会的格式
- 获取星期六约会的格式
- 在
<option>
标签中回显它(使用printf()
所以它在我们的代码中更具可读性)