0

翌年のすべての月曜日の日付をフォームのドロップダウンリストに入力する必要がありますか?

これを行うための最良の方法は何ですか?MySQLテーブルに日付が入力されている場合、またはMySQLを必要とせずにこれらの日付を生成するよりスマートな方法はありますか?

必要な出力は次のようになります。

ここに画像の説明を入力してください

選択したオプションの値は開始日だけなので、画像の最初のオプションの場合11 Mar 13は値になります。

これがばかげた質問であるならば、助けと謝罪に感謝します。

4

3 に答える 3

3

編集:単に1年ではなく開始日の通過をサポートするように変更されました

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

DateTime::addメソッドPHPを使用するだけです。次に、年の最初の月曜日を取り、メソッドを使用して 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 に答える