测距日期等于今天的日期

时间:2016-08-16 14:31:10

标签: php mysql date strtotime

询问php中的Date函数 我想在一周(星期一 - 星期六)制作一个日期范围,日期在下拉选项中等于今天的日期。让我们说今天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中是否有任何可能的简单语法?

1 个答案:

答案 0 :(得分:0)

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);
}

Demo

这里发生的是:

  1. 使用DateTimeImmutable()创建我们的开始日期,即当周的星期一
  2. 将结束日期设置为8周后(使用DateInterval()
  3. 将循环的间隔设置为一周时间段
  4. 将所有内容放入我们可以迭代的DatePeriod()对象中
  5. 获取星期一日期的格式
  6. 获取星期六约会的格式
  7. <option>代码中回复(使用printf(),以便我们的代码更具可读性)