[jquery] datepicker 특정날짜만 disable 시키기

language/jquery 2013. 9. 11. 17:34

원본 링크 http://nampoong.tistory.com/75


날짜 입력폼과 관계된 데이터 컨트롤시 jquery-ui 에서 제공하는 datepicker를 많이 이용하는데요.

오늘은 시작일과 종료일의 범위를 두고 그사이의 특정날짜들을 일부 제거해야하는 형태의 프로그램작업이 있어 작업한걸 공개해봅니다.

일단 먼저 아래와 같이 기본적으로 필요한 jquery와 jquery-ui를 불러옵니다. jquery.com CDN 을 이용했습니다.


1<link type="text/css" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" rel="stylesheet">
2<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
3<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>


날짜컨트롤들을 지역화하여 한글형태로 다루기 위해 먼저 datepicker 의 기본옵션값을 세팅해둔후 주말(토,일요일), 일요일, 이전날짜, 특정날짜들을 return 하는 함수들도 선언해 둡니다.

disabledDays 라는 배열변수에는 임의로 "2013-7-9", "2013-7-24", "2013-7-26" 와 같이 3개의 날짜를 듬성듬성 심어놓았습니다.

각 입력폼에 datepicker 를 호출하면서 beforeShowDay 라는 옵션값에 가져오는 값에 따라 특정날짜들이 disable 됩니다.


01jQuery(function($){
02    $.datepicker.regional['ko'] = {closeText: '닫기',prevText: '이전달',nextText: '다음달',currentText: '오늘',monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)','7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],dayNames: ['일','월','화','수','목','금','토'],dayNamesShort: ['일','월','화','수','목','금','토'],dayNamesMin: ['일','월','화','수','목','금','토'],weekHeader: 'Wk',dateFormat: 'yy-mm-dd',firstDay: 0,isRTL: false,showMonthAfterYear: true,yearSuffix: ''};
03    $.datepicker.setDefaults($.datepicker.regional['ko']);
04    $('#date1').datepicker({showOn: 'both',buttonText: "달력",changeMonth:true,changeYear: true,showButtonPanel:true,yearRange: 'c-99:c+99',constrainInput:true,maxDate: '+1y',beforeShowDay: disableAllTheseDays   });
05    $('#date2').datepicker({showOn: 'both',buttonText: "달력",changeMonth:true,changeYear: true,showButtonPanel:true,yearRange: 'c-99:c+99',constrainInput:true,maxDate: '+1y',beforeShowDay: noBefore  });
06    $('#date3').datepicker({showOn: 'both',buttonText: "달력",changeMonth:true,changeYear: true,showButtonPanel:true,yearRange: 'c-99:c+99',constrainInput:true,maxDate: '+1y',beforeShowDay: noWeekendsOrHolidays  });
07    $('#date4').datepicker({showOn: 'both',buttonText: "달력",changeMonth:true,changeYear: true,showButtonPanel:true,yearRange: 'c-99:c+99',constrainInput:true,maxDate: '+1y',beforeShowDay: noSundays });
08});
09 
10// 특정날짜들 배열
11var disabledDays = ["2013-7-9","2013-7-24","2013-7-26"];
12 
13// 주말(토, 일요일) 선택 막기
14function noWeekendsOrHolidays(date) {
15    var noWeekend = jQuery.datepicker.noWeekends(date);
16    return noWeekend[0] ? [true] : noWeekend;
17}
18 
19// 일요일만 선택 막기
20function noSundays(date) {
21  return [date.getDay() != 0, ''];
22}
23 
24// 이전 날짜들은 선택막기
25function noBefore(date){
26    if (date < new Date())
27        return [false];
28    return [true];
29}
30 
31// 특정일 선택막기
32function disableAllTheseDays(date) {
33    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
34    for (i = 0; i < disabledDays.length; i++) {
35        if($.inArray(y + '-' +(m+1) + '-' + d,disabledDays) != -1) {
36            return [false];
37        }
38    }
39    return [true];
40}


위 소스상의 내용은 아래 입력폼에서 테스트 해볼수 있습니다.


특정일 비활성화 : 

이전날짜 비활성화 : 

주말(토,일) 비활성화 : 

일요일만 비활성화 : 


특정날짜와 주말을 비활성화한다던지 토요일만 비활성화 한다던지.. 국경일,명절 날짜데이터를 수집해서 비활성화 한다던지 여러가지로 응용해서 만들어 볼수도 있겠습니다~~~ ^^


참고 url :

http://api.jqueryui.com/datepicker/

http://davidwalsh.name/jquery-datepicker-disable-days

저작자 표시 비영리 동일 조건 변경 허락


:

sequence reset sequence

language/DB 2013. 9. 10. 12:59

http://stackoverflow.com/questions/51470/how-do-i-reset-a-sequence-in-oracle 


CREATE or REPLACE PROCEDURE reset_sequence (sequencename IN VARCHAR2) as

      curr_val INTEGER;

   BEGIN

     EXECUTE IMMEDIATE 'alter sequence ' ||sequencename||' MINVALUE 0';

       EXECUTE IMMEDIATE 'SELECT ' ||sequencename ||'.nextval FROM dual' INTO curr_val;

       EXECUTE IMMEDIATE 'alter sequence ' ||sequencename||' increment by -'||curr_val;

       EXECUTE IMMEDIATE 'SELECT ' ||sequencename ||'.nextval FROM dual' INTO curr_val;

      EXECUTE IMMEDIATE 'alter sequence ' ||sequencename||' increment by 1';

    END reset_sequence;

'language > DB' 카테고리의 다른 글

sql 정규식  (0) 2013.09.26
여러행을 한줄로  (0) 2013.09.26
merge 문  (0) 2013.09.25
DB2 procedure  (0) 2013.08.16
ORA-01502 오류  (0) 2013.07.26
:

DB2 procedure

language/DB 2013. 8. 16. 13:30

CREATE PROCEDURE PRC_TNINFO (P_USER VARCHAR2(20), P_DB_ID NUMBER(20), P_TM VARCHAR2(14)) IS   
   
 v_state varchar2(1000) := '';   
 v_TABLE_NM  varchar2(500) := ' ';
 v_TABLE_NM2  varchar2(500) := ' ';
 v_TABLE_ID NUMBER(20);
 v_COLUMN_ID NUMBER(20);
 
 v_COLUMN_NM  varchar2(500) := '';
 v_COLUMN_KOREAN_NM  varchar2(500) := '';
 v_DATA_TY  varchar2(500) := '';
 v_DATA_LT number(4);
 v_DCMLPOINT_LT number(4);

 v_sql  varchar2(500) := '';
        
 TYPE CurTyp IS REF CURSOR;   
 cv1  CurTyp;   
 i_t  number := 0;   
 i_c  number := 0; 
   
 BEGIN
      v_sql := ' SELECT TABLE_NM,COLUMN_NM , COLUMN_KOREAN_NM, DATA_TY, DATA_LT, DCMLPOINT_LT FROM PDQM.TNTABLECOLUMNINFO  '   
           || ' WHERE REGISTER_ID = :1 AND DATABASE_ID= :2   ' ;                
  IF cv1%ISOPEN
  THEN CLOSE cv1;
  END IF;
     
  OPEN cv1 FOR v_sql using P_USER, P_DB_ID;
    
  LOOP   
   FETCH cv1 INTO  v_TABLE_NM, v_COLUMN_NM ,v_COLUMN_KOREAN_NM, v_DATA_TY, v_DATA_LT ,v_DCMLPOINT_LT ;   
   EXIT WHEN cv1%NOTFOUND; 
     IF (v_TABLE_NM <> v_TABLE_NM2)  then  
       BEGIN
           v_TABLE_ID:= SEQ_M_TABLEID.NEXTVAL;
           i_t := i_t + 1;
           i_c := 0;
           INSERT INTO TNTABLEINFO (TABLE_ID, DATABASE_ID, TABLE_NM, SORT_ORDR) 
           VALUES (v_TABLE_ID, P_DB_ID, v_TABLE_NM , i_t); 
       END;
     END IF;             
     v_TABLE_NM2 := v_TABLE_NM;             
     BEGIN
        v_COLUMN_ID := SEQ_M_COLUMNID.NEXTVAL;
        i_c := i_c + 1;
        INSERT INTO TNCOLUMNINFO 
                (COLUMN_ID, TABLE_ID, COLUMN_NM, COLUMN_KOREAN_NM, DATA_TY, DATA_LT, DCMLPOINT_LT, SORT_ORDR) 
         VALUES (v_COLUMN_ID, v_TABLE_ID, v_COLUMN_NM, v_COLUMN_KOREAN_NM, v_DATA_TY, v_DATA_LT ,v_DCMLPOINT_LT, i_c);
     END;
  END LOOP;   
  
  IF cv1%ISOPEN
  THEN CLOSE cv1;
  END IF;

  BEGIN
    DELETE FROM TNTABLECOLUMNINFO
    WHERE REGISTER_ID = P_USER
    AND DATABASE_ID = P_DB_ID;
  END;
    
END;

'language > DB' 카테고리의 다른 글

sql 정규식  (0) 2013.09.26
여러행을 한줄로  (0) 2013.09.26
merge 문  (0) 2013.09.25
sequence reset sequence  (0) 2013.09.10
ORA-01502 오류  (0) 2013.07.26
: