시작일에서 종료일까지 선택할때 달력에서 선택하면 되지만 가끔... 한두번으로 클릭으로 원하는 주의 자료를 보고 싶어하는 사람들이 가끔 있습니다.
이번주, 저번주같은 버튼으로 생성해 간단하게 만들 수 있지만 최대 15주전까지라던가 그 이상의 주간단위로 빠르게 원하는 주를 선택할때 셀렉트박스로 만들어 선택할 수 있게 만들었습니다.
우선 아래의 2가지 함수를 필요로 합니다.
<?php // 셀렉트박스의 옵션을 만들어주는 함수 (보여질텍스, value값, 선택되어질값) function option_str($data1,$data2,$option_name=''){ $data1=explode("|",$data1); $data2=explode("|",$data2); for($i=0; $i < count($data1); $i++){ $dataA[$i] = trim($data1[$i]); } for($i=0; $i < count($data2); $i++){ $dataB[$i] = trim($data2[$i]); } for($i=0; $i < count($data2); $i++){ $selected = ( $option_name == $dataB[$i] )? "selected":""; $result .="<option value='".$dataB[$i]."' ".$selected.">".$dataA[$i]."</option>"; } return $result; } // 지정한날자를 기준으로 몇주전까지 배열로 생성 // $day = 기준날자(0000-00-00), $idx = 주간단위 수 function get_weeks($day, $idx=10) { $today = strtotime($day); $start_day = date('Y-m-d', (strtotime('MONDAY', $today) > $today) ? strtotime('LAST MONDAY', $today) : strtotime('MONDAY', $today)); // 기준일짜 주의 시작일 (월) $end_day = date('Y-m-d', strtotime('SUNDAY', $today)); // 기준일짜 주의 종료일 (일) $arr[$start_day."X".$end_day] = " 이번주 : ".$start_day." ~ ".$end_day; for($i=0; $i < $idx; $i++) { $tt = (($i+1)<10)? "0":""; $a = date('Y-m-d', strtotime('-'.($i+1).' WEEK', strtotime($start_day))); // 주시작일(월) $b = date('Y-m-d', strtotime('-'.($i+1).' WEEK', strtotime($end_day))); // 주종료일(일) $arr[$a."X".$b] = $tt.($i+1)." 주전 : ".$a." ~ ".$b; } return $arr; } ?>
사용법은 아래와 같습니다.
<select name='week' id='week' class='week'> <?php $wk = get_weeks(G5_TIME_YMD, '15'); // 오늘날짜를 기준으로 15주전까지 배열 생성 $week_txt = implode("|", $wk); // 배열의 원소를 구분자"|"를 붙여 합침. $week_val = implode("|", array_keys($wk)); // 배열의 키를 구분자 "|"를 붙여 합침 echo option_str($week_txt, $week_val,$week); // 옵션 생성 ?> </select>
셀렉트박스의 value값이 0000-00-00X0000-00-00의 형태로 시작일과 종료일의 구분을 "X"로 하였으니 받는쪽에서는 "X"로 구분하여 시작일과 종료일을 구분해주면 됩니다.
예를 들면 아래처럼~~
list($fr_date, $to_date) = explode("X", $_GET['week']); $sql = "select * from table_name where reg_date between '$fr_date' and '$to_date' "; $result = sql_query($sql);