PHP:“5分で実装”日付のセレクトボックスを日数範囲を指定して実装する
ECサイトとか予約サイトなんかで日付指定するためのセレクトボックスを作る場合、UNIXタイムスタンプの取得と曜日の組み合わせとかこまごまとしてて忘れやすい。
実装する必要があるたびに調べてたりする。
なかでも食品の通販なんかだと、受注生産で何日後から発送可能なんてのが多いです。
「何日から何日までの〜」なんていうセレクトボックスを即実装したいなんて時のために作ってみた。
PHP
<?php //曜日の配列 $weekday = array('日', '月', '火', '水', '木', '金', '土'); //今日のUNIXタイムスタンプを取得 $date1 = mktime(0, 0, 0, date('m'), date('d'), date('y')); //終了予定日のUNIXタイムスタンプ値を取得(2015年1月27日までの場合) $beforedate = strtotime('2015-1-27'); //今日から数日後を指定したい場合は以下の変数を渡してやる(今日から14日後までの場合) /*$beforedate = strtotime('+14 day');*/ $days = diff_date($date1, $beforedate); //$iに、何日後から日付スタートするかを指定する for ($i = 7; $i < $days; $i++) { $date2 = $date1 + (86400 * $i); $w = date('w', mktime(0, 0, 0, date('m', $date2), date('d', $date2), date('y', $date2))); $v = date('Y', $date2) . '年' . date('n月j日', $date2) . '(' . $weekday[$w] . ')'; if ($w == 0) continue; //日曜日のみ外す if ($w == 0) { echo '<option value="' . $v . '">' . $v . '</option>'; }elseif ($w == 6) {//曜日配列の順番数で変化を付ける場合 echo '<option value="' . $v . '">' . $v . '午前中のみ</option>'; }else { echo '<option value="' . $v . '">' . $v . '</option>'; } } /* * 今日と終了予定日のUNIXタイムスタンプを受け取り、日数差の値を返します。 * * @param integer $date1 今日のUNIXタイムスタンプ * @param integer $date2 選択範囲の日にちのUNIXタイムスタンプ * @return integer 日数の値 */ function diff_date($date1, $date2) { // 渡ってきた日付をUNIXタイムスタンプに変換(UNIXタイムスタンプ値でわたってきたら値はそのまま利用) // UNIXタイムスタンプが何秒離れているかを計算 $seconddiff = abs($date2 - $date1); // 日数に変換 $daydiff = $seconddiff / (60 * 60 * 24); // 戻り値 return $daydiff; } ?>