0

我需要在表单上填充下一年所有星期一的日期的下拉列表吗?

做这个的最好方式是什么?使用填充有日期的 MySQL 表,或者是否有更智能的方法来生成这些日期而不需要 MySQL?

所需的输出将类似于:

在此处输入图像描述

所选选项的值将只是开始日期,因此对于图像中的第一个选项,11 Mar 13将是值。

如果这是一个愚蠢的问题,感谢您的帮助和道歉。

4

3 回答 3

3

编辑:修改为支持传入开始日期而不是简单的一年

function getDays($year, $startMonth=1, $startDay=1, $dayOfWeek='monday') {
    $start = new DateTime(
        sprintf('%04d-%02d-%02d', $year, $startMonth, $startDay)
    );
    $start->modify($dayOfWeek);
    $end   = new DateTime(
        sprintf('%04d-12-31', $year)
    );
    $end->modify( '+1 day' );
    $interval = new DateInterval('P1W');
    $period   = new DatePeriod($start, $interval, $end);

    foreach ($period as $dt) {
        echo $dt->format("d/m/Y") . '<br />';
    }
}

getDays(2013, 3, 12, 'monday');

将输出格式化为下拉列表应该是一个简单的练习

于 2013-03-12T11:41:57.467 回答
1

您可以简单地使用PHP,然后使用DateTime::add方法。然后可以取一年中的第一个星期一,用 7 天加 52 次的方法。这会给你整个星期一。如果您添加 6 天,您将获得截止日期。

于 2013-03-12T11:19:15.460 回答
1

此代码将输出您想要的日期列表

for($i = 0; $i <= 365; $i ++){
  $startdate = strtotime("today + $i day");
  $enddate = strtotime("today + " . ($i + 6) . " day");
  if(date('D', $startdate) == 'Mon'){
      echo date('d M y', $startdate) . " to " . date('d M y', $enddate) . "\n";
  }
}

要将此显示为下拉列表,您需要像这样将 HTML 添加到其中

<select id="date" name="date"> 
  <?
    for($i = 0; $i <= 365; $i ++){
      $startdate = strtotime("today + $i day");
      $enddate = strtotime("today + " . ($i + 6) . " day");
      if(date('D', $startdate) == 'Mon'){
          echo '<option value="' . date('d-m-Y', $startdate) . '">' .date('d M y', $startdate) . " to " . date('d M y', $enddate) . "</option>";
      }
    } 
  ?> 
</select>

我已经value以格式为选择选项的日期提供了星期一的日期,dd-mm-yyyy因此在处理提交后的表格时,您将拥有被选中的星期一。因此,如果您要选择行27 May 13 to 02 Jun 13并提交表单,则表单另一端的 php 文件将具有变量$_POST['date'],其值为27-05-2013.

于 2013-03-12T11:31:54.637 回答