[ Nexacro.Date -  일자 기타  ]

 


- 양력 nYear에 해당하는 년도의 법정 공휴일(양력) List 모두 구하기
 

/*******************************************************************************
 ★ 설명
    양력 nYear에 해당하는 년도의 법정 공휴일(양력) List 모두 구하기
 ★ parameter
    nYear : nYear에 해당하는 년도 ( 예 : 2012 )
 ★ return
    - 성공 = 공휴일 List Array ==> 각 Array[i]="yyyyMMdd공휴일명" 으로 return된다.
             ( 예 : Array[0] = "20120101신정" )
    - 실패 = 빈 Array
 ★ 목적    
    1. Solar2Lunar()가 너무느려서 만들었음
******************************************************************************/
 

function GetHolidays(nYear)

{

 var nYear;

 var aHoliday = new Array();

 

 if( fn_IsNull(nYear) )  return aHoliday;

 /////// 음력 체크

 // 구정

 aHoliday[0] = Lunar2Solar( "0" + (nYear-1) + "1230" ) + "설날";

 aHoliday[1] = AddDate(aHoliday[0], 1) + "설날";

 aHoliday[2] = AddDate(aHoliday[1], 1) + "설날";

 // 석가탄신일

 aHoliday[3] = Lunar2Solar( "0" + nYear + "0408" ) + "석가탄신일";

 // 추석

 aHoliday[4] = Lunar2Solar( "0" + nYear + "0814" ) + "추석";

 aHoliday[5] = AddDate(aHoliday[4], 1) + "추석";

 aHoliday[6] = AddDate(aHoliday[5], 1) + "추석";

 /////// 양력 체크

 aHoliday[7] = nYear+"0101" + "신정";

 aHoliday[8] = nYear+"0301" + "삼일절";

 aHoliday[9] = nYear+"0505" + "어린이날";

 aHoliday[10] = nYear+"0606" + "현충일";  

 aHoliday[11] = nYear+"0815" + "광복절";   

 aHoliday[12] = nYear+"1225" + "성탄절";   

 

//// (2013.08.30) 누락된 항목 추가

 aHoliday[13] = nYear+"1003" + "개천절";   

 aHoliday[14] = nYear+"1009" + "한글날";   

 

 return aHoliday.sort();

}

 

☞  

 

☞  

 
 
 
 

  

Posted by 농부지기
,

[ Nexacro.Date -  윤달.양력.음력. ]

 


- 윤년여부 확인
- 음력을 양력으로 변환해주는 함수 (처리가능 기간  1841 - 2043년)
- 각 월별 음력 기준 정보를 처리하는 함수(처리가능 기간  1841 - 2043년)
- 나이 확인
-
연말정산용 나이계산

 

 

 

/******************************************************************************************
 * 기능 : 윤년여부 확인
 * 인자 : sDate : yyyyMMdd형태의 날짜 ( 예 : "20121122" )
 * 리턴 : - sDate가 윤년인 경우 = true
 *         - sDate가 윤년이 아닌 경우 = false
 *         - sDate가 입력되지 않은 경우 = false
 * 예문 :
 *****************************************************************************************/

function gfn_IsLeapYear(sDate)

{

    var ret;

    var nY;

 

    if( gfn_IsNull(sDate) )    return false;

 

    nY = parseInt(sDate.substring(0,4), 10);

 

    if ((nY % 4) == 0)

    {

        if ((nY % 100) != 0 || (nY % 400) == 0)

            ret = true;

        else

            ret = false;

    }

    else

        ret = false;

 

    return ret;

}

 

/******************************************************************************************
 * 기능 : 음력을 양력으로 변환해주는 함수 (처리가능 기간  1841 - 2043년)
 * 인자 : sDate : Flag(1 Byte)+yyyyMMdd형태의 음력일자 ( 예 : "020121122" )
                  ( Flag : 평달 = "0", 윤달 = "1" )
 * 리턴 : - 성공 = yyyyMMdd형태의 양력일자
 *                  ( Flag : 평달 = "0", 윤달 = "1" )
 *         - 실패 = null
 *                  - 1841 ~ 2043 범위 오류의 경우
 *                  - sDate가 9자리가 아닐경우
 *                  - sDate의 첫자리 Flag가 "0"도 아니고 "1"도 아닌 경우
 * 예문 :
 *****************************************************************************************/

function gfn_Lunar2Solar(sDate)

{

    var sMd = "31,0,31,30,31,30,31,31,30,31,30,31";

    var aMd = new Array();  

    var aBaseInfo = new Array();    

 

    var nLy, nLm, nLd, sLflag;      // 전해온 음력 인자값을 저장할 년, 월, 일, 윤달여부 임시변수

    var nSy, nSm, nSd;              // 계산된 양력 년, 월, 일을 저장할 변수

    var y1, m1, i, j, y2, y3;   // 임시변수 

    var leap;

 

    if( gfn_IsNull(sDate) )         return "";

    if( sDate.length != 9 )     return "";

 

    sLflag = sDate.substr(0,1);

    nLy = parseInt(sDate.substr(1,4), 10);

    nLm = parseInt(sDate.substr(5,2), 10);

    nLd = parseInt(sDate.substr(7,2), 10);

    if( nLy < 1841 || nLy > 2043 )          return "";

    if( sLflag != "0" && sLflag != "1" )    return "";

        

    aBaseInfo = _SolarBase();

    aMd = sMd.split(",");

    if( gfn_IsLeapYear(sDate.substr(1,8)) == true )                 

        aMd[1] = 29;

    else

        aMd[1] = 28;    

        

    y1 = nLy - 1841;

    m1 = nLm - 1;

    leap = 0;

    if( parseInt(aBaseInfo[y1*12 + m1]) > 2 )

        leap = gfn_IsLeapYear(nLy+"0101");

 

    if( leap == 1 )

    {

        switch( parseInt(aBaseInfo[y1*12 + m1]) )

        {

            case 3 : mm = 29;

                    break;

            case 4 : mm = 30;

                    break;

            case 5 : mm = 29;

                    break;

            case 6 : mm = 30;

                    break;

        }

    }

    else

    {

        switch( parseInt(aBaseInfo[y1*12 + m1]) )

        {

            case 1 : mm = 29;

                    break;

            case 2 : mm = 30;

                    break;

            case 3 : mm = 29;

                    break;

            case 4 : mm = 29;

                    break;

            case 5 : mm = 30;

                    break;

            case 6 : mm = 30;

                    break;

        }

    }

 

    td = 0;

    for( i = 0 ; i <= y1 - 1 ; i++ )

    {

        for( j = 0 ; j <= 11 ; j++ )

        {

            switch( parseInt(aBaseInfo[i*12 + j]) )

            {

                case 1 : td = td + 29;

                        break;

                case 2 : td = td + 30;

                        break;

                case 3 : td = td + 58;

                        break;

                case 4 : td = td + 59;

                        break;

                case 5 : td = td + 59;

                        break;

                case 6 : td = td + 60;

                        break;

            }

        }

    }

 

    for( j = 0 ; j <= m1 - 1 ; j++ )

    {

        switch( parseInt(aBaseInfo[y1*12 + j]) )

        {

            case 1 : td = td + 29;

                    break;

            case 2 : td = td + 30;

                    break;

            case 3 : td = td + 58;

                    break;

            case 4 : td = td + 59;

                    break;

            case 5 : td = td + 59;

                    break;

            case 6 : td = td + 60;

                    break;

        }

    }

 

    if( leap == 1 )

    {

        switch( parseInt(aBaseInfo[y1*12 + m1]) )

        {

            case 3 : mm = 29;

                    break;  

            case 4 : mm = 29;

                    break;

            case 5 : mm = 30;

                    break;

            case 6 : mm = 30;

                    break;

        }

    }

 

    td = td + nLd + 22;

 

    if( sLflag == "1" )

    {

        switch( parseInt(aBaseInfo[y1*12 + m1]) )

        {

            case 3 : td = td + 29;

                    break;

            case 4 : td = td + 30;

                    break;

            case 5 : td = td + 29;

                    break;

            case 6 : td = td + 30;

                    break;

        }

    }

 

    y1 = 1840;

    do

    {

        y1 = y1 + 1;

        leap = gfn_IsLeapYear(y1+"0101");

 

        if( leap == 1 )

            y2 = 366;

        else

            y2 = 365;

 

        if( td <= y2 )

            break;

            

        td = td - y2;

    }

    while(1);

 

    nSy = y1;

    aMd[1] = y2 - 337;

    m1 = 0;

    do

    {

        m1 = m1 + 1;

        if( td <= parseInt(aMd[m1-1]) )

            break;

        td = td - parseInt(aMd[m1-1]);

    }

    while(1);

 

    nSm = m1;

    nSd = td;

    y3 = nSy;

    td = y3 * 365 + parseInt(y3/4) - parseInt(y3/100) + parseInt(y3/400);

    for( i = 0 ; i <= nSm - 1 ; i++ )

        td = td + parseInt(aMd[i]);

 

    td = td + nSd;

 

    return y3 + gfn_Right("0" + nSm, 2)+gfn_Right("0" + nSd, 2);

}

 

/******************************************************************************************
 * 기능 : 각 월별 음력 기준 정보를 처리하는 함수(처리가능 기간  1841 - 2043년)
          단, 내부에서 사용하는 함수임
 * 인자 : 없음
 * 리턴 : 성공 = 음력 기준정보
 * 예문 :
 *****************************************************************************************/

function _SolarBase()

{

    var kk;

 

    //1841

    kk = "1,2,4,1,1,2,1,2,1,2,2,1,";

    kk += "2,2,1,2,1,1,2,1,2,1,2,1,";

    kk += "2,2,2,1,2,1,4,1,2,1,2,1,";

    kk += "2,2,1,2,1,2,1,2,1,2,1,2,";

    kk += "1,2,1,2,2,1,2,1,2,1,2,1,";

    kk += "2,1,2,1,5,2,1,2,2,1,2,1,";

    kk += "2,1,1,2,1,2,1,2,2,2,1,2,";

    kk += "1,2,1,1,2,1,2,1,2,2,2,1,";

    kk += "2,1,2,3,2,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,1,2,1,1,2,2,1,2,";

    //1851

    kk += "2,2,1,2,1,1,2,1,2,1,5,2,";

    kk += "2,1,2,2,1,1,2,1,2,1,1,2,";

    kk += "2,1,2,2,1,2,1,2,1,2,1,2,";

    kk += "1,2,1,2,1,2,5,2,1,2,1,2,";

    kk += "1,1,2,1,2,2,1,2,2,1,2,1,";

    kk += "2,1,1,2,1,2,1,2,2,2,1,2,";

    kk += "1,2,1,1,5,2,1,2,1,2,2,2,";

    kk += "1,2,1,1,2,1,1,2,2,1,2,2,";

    kk += "2,1,2,1,1,2,1,1,2,1,2,2,";

    kk += "2,1,6,1,1,2,1,1,2,1,2,2,";

    //1861

    kk += "1,2,2,1,2,1,2,1,2,1,1,2,";

    kk += "2,1,2,1,2,2,1,2,2,3,1,2,";

    kk += "1,2,2,1,2,1,2,2,1,2,1,2,";

    kk += "1,1,2,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,1,2,4,1,2,2,1,2,2,1,";

    kk += "2,1,1,2,1,1,2,2,1,2,2,2,";

    kk += "1,2,1,1,2,1,1,2,1,2,2,2,";

    kk += "1,2,2,3,2,1,1,2,1,2,2,1,";

    kk += "2,2,2,1,1,2,1,1,2,1,2,1,";

    kk += "2,2,2,1,2,1,2,1,1,5,2,1,";

    //1871

    kk += "2,2,1,2,2,1,2,1,2,1,1,2,";

    kk += "1,2,1,2,2,1,2,1,2,2,1,2,";

    kk += "1,1,2,1,2,4,2,1,2,2,1,2,";

    kk += "1,1,2,1,2,1,2,1,2,2,2,1,";

    kk += "2,1,1,2,1,1,2,1,2,2,2,1,";

    kk += "2,2,1,1,5,1,2,1,2,2,1,2,";

    kk += "2,2,1,1,2,1,1,2,1,2,1,2,";

    kk += "2,2,1,2,1,2,1,1,2,1,2,1,";

    kk += "2,2,4,2,1,2,1,1,2,1,2,1,";

    kk += "2,1,2,2,1,2,2,1,2,1,1,2,";

    //1881

    kk += "1,2,1,2,1,2,5,2,2,1,2,1,";

    kk += "1,2,1,2,1,2,1,2,2,1,2,2,";

    kk += "1,1,2,1,1,2,1,2,2,2,1,2,";

    kk += "2,1,1,2,3,2,1,2,2,1,2,2,";

    kk += "2,1,1,2,1,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,2,1,1,2,1,2,1,2,";

    kk += "2,2,1,5,2,1,1,2,1,2,1,2,";

    kk += "2,1,2,2,1,2,1,1,2,1,2,1,";

    kk += "2,1,2,2,1,2,1,2,1,2,1,2,";

    kk += "1,5,2,1,2,2,1,2,1,2,1,2,";

    //1891

    kk += "1,2,1,2,1,2,1,2,2,1,2,2,";

    kk += "1,1,2,1,1,5,2,2,1,2,2,2,";

    kk += "1,1,2,1,1,2,1,2,1,2,2,2,";

    kk += "1,2,1,2,1,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,5,1,2,1,2,1,2,1,";

    kk += "2,2,2,1,2,1,1,2,1,2,1,2,";

    kk += "1,2,2,1,2,1,2,1,2,1,2,1,";

    kk += "2,1,5,2,2,1,2,1,2,1,2,1,";

    kk += "2,1,2,1,2,1,2,2,1,2,1,2,";

    kk += "1,2,1,1,2,1,2,5,2,2,1,2,";

    //1901

    kk += "1,2,1,1,2,1,2,1,2,2,2,1,";

    kk += "2,1,2,1,1,2,1,2,1,2,2,2,";

    kk += "1,2,1,2,3,2,1,1,2,2,1,2,";

    kk += "2,2,1,2,1,1,2,1,1,2,2,1,";

    kk += "2,2,1,2,2,1,1,2,1,2,1,2,";

    kk += "1,2,2,4,1,2,1,2,1,2,1,2,";

    kk += "1,2,1,2,1,2,2,1,2,1,2,1,";

    kk += "2,1,1,2,2,1,2,1,2,2,1,2,";

    kk += "1,5,1,2,1,2,1,2,2,2,1,2,";

    kk += "1,2,1,1,2,1,2,1,2,2,2,1,";

    //1911

    kk += "2,1,2,1,1,5,1,2,2,1,2,2,";

    kk += "2,1,2,1,1,2,1,1,2,2,1,2,";

    kk += "2,2,1,2,1,1,2,1,1,2,1,2,";

    kk += "2,2,1,2,5,1,2,1,2,1,1,2,";

    kk += "2,1,2,2,1,2,1,2,1,2,1,2,";

    kk += "1,2,1,2,1,2,2,1,2,1,2,1,";

    kk += "2,3,2,1,2,2,1,2,2,1,2,1,";

    kk += "2,1,1,2,1,2,1,2,2,2,1,2,";

    kk += "1,2,1,1,2,1,5,2,2,1,2,2,";

    kk += "1,2,1,1,2,1,1,2,2,1,2,2,";

    //1921

    kk += "2,1,2,1,1,2,1,1,2,1,2,2,";

    kk += "2,1,2,2,3,2,1,1,2,1,2,2,";

    kk += "1,2,2,1,2,1,2,1,2,1,1,2,";

    kk += "2,1,2,1,2,2,1,2,1,2,1,1,";

    kk += "2,1,2,5,2,1,2,2,1,2,1,2,";

    kk += "1,1,2,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,1,2,1,2,1,2,2,1,2,2,";

    kk += "1,5,1,2,1,1,2,2,1,2,2,2,";

    kk += "1,2,1,1,2,1,1,2,1,2,2,2,";

    kk += "1,2,2,1,1,5,1,2,1,2,2,1,";

    //1931

    kk += "2,2,2,1,1,2,1,1,2,1,2,1,";

    kk += "2,2,2,1,2,1,2,1,1,2,1,2,";

    kk += "1,2,2,1,6,1,2,1,2,1,1,2,";

    kk += "1,2,1,2,2,1,2,2,1,2,1,2,";

    kk += "1,1,2,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,4,1,2,1,2,1,2,2,2,1,";

    kk += "2,1,1,2,1,1,2,1,2,2,2,1,";

    kk += "2,2,1,1,2,1,4,1,2,2,1,2,";

    kk += "2,2,1,1,2,1,1,2,1,2,1,2,";

    kk += "2,2,1,2,1,2,1,1,2,1,2,1,";

    //1941

    kk += "2,2,1,2,2,4,1,1,2,1,2,1,";

    kk += "2,1,2,2,1,2,2,1,2,1,1,2,";

    kk += "1,2,1,2,1,2,2,1,2,2,1,2,";

    kk += "1,1,2,4,1,2,1,2,2,1,2,2,";

    kk += "1,1,2,1,1,2,1,2,2,2,1,2,";

    kk += "2,1,1,2,1,1,2,1,2,2,1,2,";

    kk += "2,5,1,2,1,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,2,1,1,2,1,2,1,2,";

    kk += "2,2,1,2,1,2,3,2,1,2,1,2,";

    kk += "2,1,2,2,1,2,1,1,2,1,2,1,";

    //1951

    kk += "2,1,2,2,1,2,1,2,1,2,1,2,";

    kk += "1,2,1,2,4,2,1,2,1,2,1,2,";

    kk += "1,2,1,1,2,2,1,2,2,1,2,2,";

    kk += "1,1,2,1,1,2,1,2,2,1,2,2,";

    kk += "2,1,4,1,1,2,1,2,1,2,2,2,";

    kk += "1,2,1,2,1,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,2,1,1,5,2,1,2,2,";

    kk += "1,2,2,1,2,1,1,2,1,2,1,2,";

    kk += "1,2,2,1,2,1,2,1,2,1,2,1,";

    kk += "2,1,2,1,2,5,2,1,2,1,2,1,";

    //1961

    kk += "2,1,2,1,2,1,2,2,1,2,1,2,";

    kk += "1,2,1,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,2,3,2,1,2,1,2,2,2,1,";

    kk += "2,1,2,1,1,2,1,2,1,2,2,2,";

    kk += "1,2,1,2,1,1,2,1,1,2,2,1,";

    kk += "2,2,5,2,1,1,2,1,1,2,2,1,";

    kk += "2,2,1,2,2,1,1,2,1,2,1,2,";

    kk += "1,2,2,1,2,1,5,2,1,2,1,2,";

    kk += "1,2,1,2,1,2,2,1,2,1,2,1,";

    kk += "2,1,1,2,2,1,2,1,2,2,1,2,";

    //1971

    kk += "1,2,1,1,5,2,1,2,2,2,1,2,";

    kk += "1,2,1,1,2,1,2,1,2,2,2,1,";

    kk += "2,1,2,1,1,2,1,1,2,2,2,1,";

    kk += "2,2,1,5,1,2,1,1,2,2,1,2,";

    kk += "2,2,1,2,1,1,2,1,1,2,1,2,";

    kk += "2,2,1,2,1,2,1,5,2,1,1,2,";

    kk += "2,1,2,2,1,2,1,2,1,2,1,1,";

    kk += "2,2,1,2,1,2,2,1,2,1,2,1,";

    kk += "2,1,1,2,1,6,1,2,2,1,2,1,";

    kk += "2,1,1,2,1,2,1,2,2,1,2,2,";

    //1981

    kk += "1,2,1,1,2,1,1,2,2,1,2,2,";

    kk += "2,1,2,3,2,1,1,2,2,1,2,2,";

    kk += "2,1,2,1,1,2,1,1,2,1,2,2,";

    kk += "2,1,2,2,1,1,2,1,1,5,2,2,";

    kk += "1,2,2,1,2,1,2,1,1,2,1,2,";

    kk += "1,2,2,1,2,2,1,2,1,2,1,1,";

    kk += "2,1,2,2,1,5,2,2,1,2,1,2,";

    kk += "1,1,2,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,1,2,1,2,1,2,2,1,2,2,";

    kk += "1,2,1,1,5,1,2,1,2,2,2,2,";

    //1991

    kk += "1,2,1,1,2,1,1,2,1,2,2,2,";

    kk += "1,2,2,1,1,2,1,1,2,1,2,2,";

    kk += "1,2,5,2,1,2,1,1,2,1,2,1,";

    kk += "2,2,2,1,2,1,2,1,1,2,1,2,";

    kk += "1,2,2,1,2,2,1,5,2,1,1,2,";

    kk += "1,2,1,2,2,1,2,1,2,2,1,2,";

    kk += "1,1,2,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,1,2,3,2,2,1,2,2,2,1,";

    kk += "2,1,1,2,1,1,2,1,2,2,2,1,";

    kk += "2,2,1,1,2,1,1,2,1,2,2,1,";

    //2001

    kk += "2,2,2,3,2,1,1,2,1,2,1,2,";

    kk += "2,2,1,2,1,2,1,1,2,1,2,1,";

    kk += "2,2,1,2,2,1,2,1,1,2,1,2,";

    kk += "1,5,2,2,1,2,1,2,2,1,1,2,";

    kk += "1,2,1,2,1,2,2,1,2,2,1,2,";

    kk += "1,1,2,1,2,1,5,2,2,1,2,2,";

    kk += "1,1,2,1,1,2,1,2,2,2,1,2,";

    kk += "2,1,1,2,1,1,2,1,2,2,1,2,";

    kk += "2,2,1,1,5,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,2,1,1,2,1,2,1,2,";

    //2011

    kk += "2,1,2,2,1,2,1,1,2,1,2,1,";

    kk += "2,1,6,2,1,2,1,1,2,1,2,1,";

    kk += "2,1,2,2,1,2,1,2,1,2,1,2,";

    kk += "1,2,1,2,1,2,1,2,5,2,1,2,";

    kk += "1,2,1,1,2,1,2,2,2,1,2,2,";

    kk += "1,1,2,1,1,2,1,2,2,1,2,2,";

    kk += "2,1,1,2,3,2,1,2,1,2,2,2,";

    kk += "1,2,1,2,1,1,2,1,2,1,2,2,";

    kk += "2,1,2,1,2,1,1,2,1,2,1,2,";

    kk += "2,1,2,5,2,1,1,2,1,2,1,2,";

    //2021

    kk += "1,2,2,1,2,1,2,1,2,1,2,1,";

    kk += "2,1,2,1,2,2,1,2,1,2,1,2,";

    kk += "1,5,2,1,2,1,2,2,1,2,1,2,";

    kk += "1,2,1,1,2,1,2,2,1,2,2,1,";

    kk += "2,1,2,1,1,5,2,1,2,2,2,1,";

    kk += "2,1,2,1,1,2,1,2,1,2,2,2,";

    kk += "1,2,1,2,1,1,2,1,1,2,2,2,";

    kk += "1,2,2,1,5,1,2,1,1,2,2,1,";

    kk += "2,2,1,2,2,1,1,2,1,1,2,2,";

    kk += "1,2,1,2,2,1,2,1,2,1,2,1,";

    //2031

    kk += "2,1,5,2,1,2,2,1,2,1,2,1,";

    kk += "2,1,1,2,1,2,2,1,2,2,1,2,";

    kk += "1,2,1,1,2,1,5,2,2,2,1,2,";

    kk += "1,2,1,1,2,1,2,1,2,2,2,1,";

    kk += "2,1,2,1,1,2,1,1,2,2,1,2,";

    kk += "2,2,1,2,1,4,1,1,2,1,2,2,";

    kk += "2,2,1,2,1,1,2,1,1,2,1,2,";

    kk += "2,2,1,2,1,2,1,2,1,1,2,1,";

    kk += "2,2,1,2,5,2,1,2,1,2,1,1,";

    kk += "2,1,2,2,1,2,2,1,2,1,2,1,";

    //2041

    kk += "2,1,1,2,1,2,2,1,2,2,1,2,";

    kk += "1,5,1,2,1,2,1,2,2,2,1,2,";

    kk += "1,2,1,1,2,1,1,2,2,1,2,2";

 

    var arr = new Array();

    arr = kk.split(",");

 

    return arr;

}

/*******************************************************************************
 ★ 설명
    나이 확인
 ★ parameter
   juminNo: 주민번호 13자리
 ★ return
   - age 나이
 ******************************************************************************/

function gf_getAge(juminNo)

 {

         if(gf_isNull(juminNo)) return;

         

        var today = gf_today().substr(0,4);

         var item = juminNo.substr(0,2);//주민번호의 년도 2자리

         var v_LNum = juminNo.substr(6).toString();

         var v_YY = null;

         

        if (v_LNum.substr(0,1) == '1' ||  v_LNum.substr(0,1) == '2')

                 v_YY  = '19';

         else if (v_LNum.substr(0,1) == '3' ||  v_LNum.substr(0,1) == '4')

                v_YY  = '20';

         

        var age = toNumber(today) - toNumber(v_YY + item + "");

         

        return age;

 }

 

/*******************************************************************************
 ★ 설명
    연말정산용 나이계산
 ★ parameter
   juminNo: 주민번호 13자리
 ★ return
   - age 나이
 ******************************************************************************/

 function gf_getRefAge(juminNo)

 {

         if(gf_isNull(juminNo)) return;

         

        var today = gf_today().substr(0,4);

         var item = juminNo.substr(0,2);//주민번호의 년도 2자리

         var v_LNum = juminNo.substr(6).toString();

         var v_YY = null;

         

        if (v_LNum.substr(0,1) == '1' ||  v_LNum.substr(0,1) == '2')

                 v_YY  = '19';

         else if (v_LNum.substr(0,1) == '3' ||  v_LNum.substr(0,1) == '4')

                v_YY  = '20';

         

        var age = toNumber(today) - toNumber(v_YY + item + "");

         

        return age-1;

 }

 

☞  

 
 
 
 

  

Posted by 농부지기
,

[ Nexacro.Date -  시간 다루기 ]

 

- 시간간의 차이 계산
- 해당 Locale의 오늘 날짜+시간를 가져온다.
- 해당 PC의 오늘 날짜 + 시간을 가져온다.
 

/**********************************************************************************
 * 함수명      : gfn_diffTime
 * 설명        : 두 시간간의 차이 계산
 * argument     : sStartTime(HHmmss형태의 From 시간) ( 예 : "20121122" )
 *              : sEndTime(HHmmss형태의 To 시간) ( 예 : "20121202" )
 *              : sType(구하고자하는 타입(시, 분, 초)) ( 예 : "HH" )
 * return Type : Int
**********************************************************************************/

function gfn_diffTime(sStartTime, sEndTime, sType)

{

    sStartTime = String(sStartTime);

    sEndTime   = String(sEndTime);

    sType      = String(sType);

    var nReturnValue;

    var nFrom_HH = toNumber(sStartTime.substring(0,2));

    var nFrom_mm = toNumber(sStartTime.substring(2,4));

    var nFrom_ss = toNumber(sStartTime.substring(4,6));

    

    var nTo_HH = toNumber(sEndTime.substring(0,2));

    var nTo_mm = toNumber(sEndTime.substring(2,4));

    var nTo_ss = toNumber(sEndTime.substring(4,6));

    

    var nFromTotal_ss = (nFrom_HH*3600)+(nFrom_mm*60)+nFrom_ss;

    var nToTotal_ss = (nTo_HH*3600)+(nTo_mm*60)+nTo_ss;

    

    if(sType=="HH")

    {

        return (Math.floor((nToTotal_ss - nFromTotal_ss)/3600));

    }else if(sType=="mm")

    {

        return (Math.floor((nToTotal_ss - nFromTotal_ss)/60));

    }else if(sType=="ss")

    {

        return (nToTotal_ss - nFromTotal_ss);

    }

}

/******************************************************************************************
 * 기능 : 해당 Locale의 오늘 날짜+시간를 가져온다.
 * 인자 :
 * 리턴 : string
 * 예문 :
 *****************************************************************************************/

function gfn_TodayTime()

{

    var objDate = new Date();

    var ngetTime = objDate.getTime();

    var objTime = new Date(ngetTime);   // objTime는 해당 Locale로 변경됨

 

    var strToday  = objTime.getFullYear() + "";

    strToday += gfn_Right("0" + (objTime.getMonth() + 1), 2);

    strToday += gfn_Right("0" + objTime.getDate(), 2);

    strToday += gfn_Right("0" + objTime.getHours(), 2);

    strToday += gfn_Right("0" + objTime.getMinutes(), 2);

    strToday += gfn_Right("0" + objTime.getSeconds(), 2);

 

    return strToday;

}

 

/*******************************************************************************
 ★ 설명
    해당 PC의 오늘 날짜 + 시간을 가져온다.
 ★ parameter
 ★ return
    - 성공 = yyyyMMddhhmiss형태의 오늘 날짜 ( 예 : "20121122223010" )
    - 실패 = 없음
******************************************************************************/

function fn_TodayTime()

{

 var strToday = "";

 var objDate = new Date();

 var sToday  = objDate.getFullYear().toString();

 

 sToday += Right("0" + (objDate.getMonth() + 1), 2);

 sToday += Right("0" + objDate.getDate(), 2);

 sToday += Right("0" + objDate.getHours(), 2);

 sToday += Right("0" + objDate.getMinutes(), 2);

 sToday += Right("0" + objDate.getSeconds(), 2);

 //strToday += objDate.getMilliseconds();

 return sToday;

}

☞  

 

☞  

 
 
 
 

  

Posted by 농부지기
,

[ Nexacro.Date -  일자 얻기 및 계산하기 ]

 


- 해당 Locale의 오늘 날짜를 가져온다
- 해당 PC의 오늘 날짜를 가져온다.
- 력된 날자에 OffSet 으로 지정된 만큼의 일을 더한다.
- 입력된 날자에 nOffset 으로 지정된 만큼의 일을 증감한다.

- 2개의 날짜간의 Day count.
- 2개의 날짜간의 일수 계산
- 문자를 날짜로 변환하는 함수.
- 문자를 날짜로 변환하는 함수.
- 날짜를 문자로 변환하는 함수.
 
- 입력된 날자로부터 요일을 구함
- 입력된 날자로부터 요일을 구함
 
- 해당월의 마지막 날짜를 숫자로 구하기
- 해당월의 마지막 날짜를 yyyyMMdd형태로 구하기
 
- 해당월의 마지막 날짜를 yyyyMMdd형태로 구하기
- Diff만큼 후 날짜 구하는 함수.
 
- Diff만큼 후 날짜 구하는 함수.
- 숫자로 된 년, 월, 일을 yyyyMMdd형의 문자열 날짜로 만든다.
- Date기본 Format( = yyyyMMdd[hhmiss])를 XP Date기본 Format( = yyyy-MM-dd[ hh:mi:ss] ) 으로 바꾸어
- 날짜 더하거나 뺀값을 반환하는 메소드

/******************************************************************************************
 * 기능 : 해당 Locale의 오늘 날짜를 가져온다.
 * 인자 :
 * 리턴 : string
 * 예문 :
 *****************************************************************************************/

function gfn_Today()

{

    var objDate = new Date();

    var ngetTime = objDate.getTime();

    

    objDate.setTime(ngetTime);   // objDate는 해당 Locale로 변경됨

 

    var strToday  = objDate.getFullYear() + "";

    strToday += gfn_Right("0" + (objDate.getMonth() + 1), 2);

    strToday += gfn_Right("0" + objDate.getDate(), 2);

 

    return strToday;

}

 

 

/*******************************************************************************
 ★ 설명
    해당 PC의 오늘 날짜를 가져온다.
 ★ parameter
 ★ return
    - 성공 = yyyyMMdd형태의 오늘 날짜 ( 예 : "20121122" )
    - 실패 = 없음
******************************************************************************/

function fn_Today()

{

 var sToday = "";

 var objDate = new Date();

 var sToday  = objDate.getFullYear().toString();

 sToday += Right("0" + (objDate.getMonth() + 1), 2);

 sToday += Right("0" + objDate.getDate(), 2);

 

 return sToday;

}

/******************************************************************************************
 * 기능 : 입력된 날자에 OffSet 으로 지정된 만큼의 일을 더한다.
 * 인자 : psDate ('yyyyMMdd' 형태로 표현된 날자)
 *         pnOffSet (날짜로부터 증가 감소값). 지정하지 않으면 Default Value = 1 로 적용됩니다)
 * 리턴 : Date에 nOffset이 더해진 결과를 'yyyyMMdd'로 표현된 날자.
 * 예문 :
 *****************************************************************************************/

function gfn_AddDate(psDate, pnOffSet){

    if (gfn_IsNull(pnOffSet)) pnOffSet = 1;

 

    var d = new Date(1);//윤달 때문에 꼭넣어야함

    d.setYear(psDate.substr(0, 4));

    d.setMonth(toNumber(psDate.substr(4, 2))-1);

    d.setDate( toNumber(psDate.substr(6, 2)));

    d.toFormatString("%Y%m%d", "ko_KR"); // 값셋팅

    

    d.addDate(pnOffSet);

    return d.toFormatString("%Y%m%d", "ko_KR");

}


/**********************************************************************************
 ★ 설명
    입력된 날자에 nOffset 으로 지정된 만큼의 일을 증감한다.
 ★ parameter
    1. sDate : 날짜 ( 예 : "20121122" )
    2. nOffset : 일 증감값 ( 예 : 10 또는 -10 )
 ★ return
    - 성공 = yyyyMMdd형태의 증감된 날짜 ( 예 : "20121202" 또는 "20121112" )
    - 실패 = ""
**********************************************************************************/

function fn_AddDate(sDate, nOffset)

{

 if( fn_IsNull(sDate) || fn_IsNull(nOffset) ) return "";

 

   var nYear = parseInt(sDate.substr(0, 4));

   var nMonth = parseInt(sDate.substr(4, 2));

   var nDate = parseInt(sDate.substr(6, 2)) + nOffset;

   

   return MakeDate(nYear, nMonth, nDate);

}
 

/******************************************************************************************
 * 기능 : 2개의 날짜간의 Day count
 * 인자 : sFdate   시작일자
 *         sTdate   종료일자
 * 리턴 : 양 일자간의 Day count
 * 예문 : gfn_GetDiffDay("20090808", "20091001")
 *****************************************************************************************/

 function gfn_GetDiffDay(sFdate, sTdate)

 {

    sFdate = new String(sFdate);

    sFdate = sFdate.replace(" ", "").replace("-", "").replace("/", "");

    sTdate = new String(sTdate);

    sTdate = sTdate.replace(" ", "").replace("-", "").replace("/", "");

 

    sFdate = gfn_Left(sFdate, 8);

    sTdate = gfn_Left(sTdate, 8);

    

    if (sFdate.length != 8 || sTdate.length != 8

         || isNumeric(sFdate) == false || isNumeric(sTdate) == false

         || gfn_GetDay(sFdate) == -1 || gfn_GetDay(sTdate) == -1) {

        return null;

    }

 

    var nDiffDate = gfn_StrToDate(sTdate) - gfn_StrToDate(sFdate);

    var nDay      = 1000*60*60*24;

 

    nDiffDate = parseInt(nDiffDate/nDay);

    if (nDiffDate < 0) {

        nDiffDate = nDiffDate - 1;

    } else {

        nDiffDate = nDiffDate + 1;

    }

 

    return nDiffDate;

}

/*******************************************************************************
 ★ 설명
     2개의 날짜간의 일수 계산
 ★ parameter
    1. sStartDate : yyyyMMdd형태의 From 일자 ( 예 : "20121122" )
    2. sEndDate   : yyyyMMdd형태의 To 일자 ( 예 : "20121202" )
 ★ return
    - 성공 = 숫자 형태의 차이일수  ( 예 : 10 )
             단, sEndDate < sStartDate이면 음수가 return된다.
    - 실패 = NaN
 ******************************************************************************/

function fn_DiffDate(sStartDate, sEndDate)

{

 if( fn_IsNull(sStartDate) || fn_IsNull(sEndDate) )  return NaN;

 

    var vFromDate = new Date(parseInt(sEndDate.substring(0,4),  10), parseInt(sEndDate.substring(4,6)-1,  10), parseInt(sEndDate.substring(6,8), 10));

    var vToDate = new Date(parseInt(sStartDate.substring(0,4),  10), parseInt(sStartDate.substring(4,6)-1,  10), parseInt(sStartDate.substring(6,8), 10));

    

    return parseInt((vFromDate - vToDate)/(1000*60*60*24));

}

 

 

/******************************************************************************************
 * 기능 : 문자를 날짜로 변환하는 함수.
 * 인자 : sDate 8자리 형식으로된 날짜. yyyyMMdd의 형식으로 입력됩니다.
 * 리턴 : Date
 * 예문 :
 *****************************************************************************************/

function gfn_StrToDate(sDate)

{

    var nYear  = parseInt(sDate.substr(0, 4));

    var nMonth = parseInt(sDate.substr(4, 2)) - 1;

    var nDate  = parseInt(sDate.substr(6, 2));

 

    return new Date(nYear, nMonth, nDate);

}

 

/******************************************************************************************
 * 기능 : 날짜를 문자로 변환하는 함수.
 * 인자 : sDate 8자리 형식으로된 날짜. yyyyMMdd의 형식으로 입력됩니다.
 * 리턴 : 해당날짜를 리턴.
 * 예문 :
 *****************************************************************************************/

function gfn_DateToStr(sDate)

{

  return (new Date(sDate)).getFullYear()

           + (((new Date(sDate)).getMonth() + 1) + "").padLeft(2, '0')

           + (((new Date(sDate)).getDate()) + "").padLeft(2, '0');

}

 

/******************************************************************************************
 * 기능 : 입력된 날짜에 mask 적용하여 구함
 * 인자 : psDate : yyyyMMdd 또는 yyyyMMddhhmmss 형태의 날짜 ( 예 : "20121122" )
 * 리턴 : mask 적용한 값 ( 예 : 2012/11/22 )
 * 예문 :
 *****************************************************************************************/

function gfn_GetMaskDate(psDate)

{

    var vsDate;

    if ( psDate.length == 8 ) {

        vsDate = gv_DateFormat;

        vsDate = vsDate.replace("yyyy",psDate.substr(0,4));

        vsDate = vsDate.replace("MM",psDate.substr(4,2));

        vsDate = vsDate.replace("dd",psDate.substr(6,2));

    }

    else if ( psDate.length == 14 ) {

        vsDate = gv_DateFormat + " hh:mm:ss";

        vsDate = vsDate.replace("yyyy",psDate.substr(0,4));

        vsDate = vsDate.replace("MM",psDate.substr(4,2));

        vsDate = vsDate.replace("dd",psDate.substr(6,2));

        vsDate = vsDate.replace("hh",psDate.substr(8,2));

        vsDate = vsDate.replace("mm",psDate.substr(10,2));

        vsDate = vsDate.replace("ss",psDate.substr(12,2));

    }

    else {

        vsDate = psDate.toString();

    }

    

    return vsDate;

}

 

/******************************************************************************************
 * 기능 : 입력된 날자로부터 요일을 구함
 * 인자 : sDate  8자리 형식으로된 날짜. yyyyMMdd의 형식으로 입력됩니다.
 * 리턴 : 요일에 따른 숫자.
 *        0 = 일요일 ~ 6 = 토요일 로 대응됩니다.
 *        오류가 발생할 경우 -1이 Return됩니다.
 * 예문 :
 *****************************************************************************************/

function gfn_GetDay(sDate)

{

    var objDate = gfn_StrToDate(sDate);

    return objDate.getDay();

}

 

/******************************************************************************************
 * 기능 : 입력된 날자로부터 요일명을 구함
 * 인자 : sDate  8자리 형식으로된 날짜. yyyyMMdd의 형식으로 입력됩니다.
 * 리턴 : 요일명
 * 예문 :
 *****************************************************************************************/
function gfn_GetDayName(sDate)

{

    var objDayName = new Array("일요일", "월요일", "화요일","수요일","목요일", "금요일","토요일");

    var objDate = gfn_GetDay(sDate);

 

    return objDayName[objDate];

}

/******************************************************************************************
 * 기능 : 해당월의 마지막 날짜를 숫자로 구하기
 * 인자 : sDate : yyyyMMdd형태의 날짜 ( 예 : "20121122" )
 * 리턴 : 성공 = 마지막 날짜 숫자값 ( 예 : 30 )
 *         실패 = -1
 * 예문 :
 *****************************************************************************************/

function gfn_LastDateNum(sDate)

{

    var nMonth, nLastDate;

 

    if( gfn_IsNull(sDate) )     return -1;

 

    nMonth = parseInt(sDate.substr(4,2), 10);

    if( nMonth == 1 || nMonth == 3 || nMonth == 5 || nMonth == 7  || nMonth == 8 || nMonth == 10 || nMonth == 12 )

        nLastDate = 31;

    else if( nMonth == 2 )  

    {

        if( gfn_IsLeapYear(sDate) == true )

            nLastDate = 29;

        else

            nLastDate = 28;

    }

    else

        nLastDate = 30;

        

    return nLastDate;

}

 

/******************************************************************************************
 * 기능 : 해당월의 마지막 날짜를 yyyyMMdd형태로 구하기
 * 인자 : sDate : yyyyMMdd형태의 날짜 ( 예 : "20121122" )
 * 리턴 : 성공 = yyyyMMdd형태의 마지막 날짜 ( 예 : "20121130" )
 *         실패 = ""
 * 예문 :
 *****************************************************************************************/

function gfn_LastDate(sDate)

{

    if( gfn_IsNull(sDate) )    return "";

 

    var nLastDate = gfn_LastDateNum(sDate);

 

    return sDate.substr(0,6) + nLastDate.toString();

}

 

/******************************************************************************************
 * 기능 : 한달후 날짜 구하는 함수.
 * 인자 : strDate : yyyyMMdd형태의 날짜 ( 예 : "20121122" )
 * 리턴 : 성공 = yyyyMMdd형태의 해당날짜를 리턴. ( 예 : "20121130" )
           실패 = ""
 * 예문 :
 *****************************************************************************************/

function gfn_GetOneMonthAfter(strDate)

{

    if (strDate)

    {

        var date = str2Date(strDate);

        var d = (new Date(date)).addMonth(1);

    } else

    {

        var d = (new Date).addMonth(1);

    }

 

    var s = (new Date(d)).getFullYear()

           + (((new Date(d)).getMonth() + 1) + "").padLeft(2, '0')

           + (((new Date(d)).getDate()) + "").padLeft(2, '0');

 

    return (s);

}

 

/******************************************************************************************
 * 기능 : Diff만큼 후 날짜 구하는 함수.
 * 인자 : strDate : yyyyMMdd형태의 날짜 ( 예 : "20121122" )
          diff : 날짜로부터 증가 감소값 offset
 * 리턴 : 성공 = yyyyMMdd형태의 해당날짜를 리턴. ( 예 : "20121130" )
 *        실패 = ""
 * 예문 :
 *****************************************************************************************/

function gfn_GetDateDiff(strDate, diff)

{

    if (strDate)

    {

        var date = str2Date(strDate);

        var d = (new Date(date)).addDate(diff);

    } else

    {

        var d = (new Date).addDate(diff);

    }

 

    var s = (new Date(d)).getFullYear()

           + (((new Date(d)).getMonth() + 1) + "").padLeft(2, '0')

           + (((new Date(d)).getDate()) + "").padLeft(2, '0');

 

    return (s);

}

 


/******************************************************************************************

// 해당 주의 시작일/종료일을 가져옴
 *****************************************************************************************/

function gfn_weekDayfromTo(year,month,week)

{

    var sDate = new Date(year +"/" + month + "/01");

    var eDate = new Date(year,month,"0");

    var rtnSdate,rtnEdate,wnum;

    var beforeDayCnt = 0;      

    var startDayWeek,endDayWeek;

     

    // 해당일의 요일을 숫자로 가져옴

    wnum = sDate.getDay();        

    

    // 1주차 전에 남아 있는 이전일의 갯수(일요일까지)

    if (wnum < 1){            

        beforeDayCnt = 1;               // 해당월의 시작일이 일요일 이라면

    } else if(wnum > 1) {

        beforeDayCnt = 7 - ( wnum - 1 ); // 해당월의 시작일이 월요일 이후라면

    }

    

    // 관련된 주차의 시작일

    startDayWeek = (beforeDayCnt + 1) + (7 * (week-1));

    //trace(wnum+"/"+beforeDayCnt + "/"+startDayWeek);

    rtnSdate = new Date(year + "/" + month + "/" + startDayWeek);

    

    // 관련주차의 종료일

    endDayWeek = startDayWeek + 6;

    if (week == fpm_fn_weekDayCount(year,month)) {     //해당 주차가 마지막주 라면

         endDayWeek = endDayWeek - eDate.getDate();

         rtnEdate = new Date(year + "/" + month + "/" + endDayWeek);

         rtnEdate.addMonth(1);

    } else {

        rtnEdate = new Date(year + "/" + month + "/" + endDayWeek);

    }

    

    return _dateToStr(rtnSdate) + "~" + _dateToStr(rtnEdate);

}

 


/**********************************************************************************
 ★ 설명
    숫자로 된 년, 월, 일을 yyyyMMdd형의 문자열 날짜로 만든다.
 ★ parameter
    1. nYear  : 년도 ( 예 : 2012 )
    2. nMonth : 월 ( 예 : 11 )
    3. nDate   : 일 ( 예 : 22 )
 ★ return
    - 성공 = yyyyMMdd형태의 날짜 ( 예 : "20121122" )
    - 실패 = ""
 ★ 주의사항     
    년, 월, 일의 값이 범위에 맞지 않는 값을 입력하면 그에 적합한 날짜로 변경해준다.
    (예 : nYear = 2012, nMonth = 13, nDate = 32 ==> return = "20130201"
          nYear = 2012, nMonth = 1, nDate = -1 ==> return = "20111230")
**********************************************************************************/

function fn_MakeDate(nYear, nMonth, nDate)

{

 if( fn_IsNull(nYear) || fn_IsNull(nMonth) || fn_IsNull(nDate) ) return "";

 

   var objDate = new Date(nYear, nMonth-1, nDate);

 

 var sYear   = objDate.getFullYear().toString();

 var sMonth  = Right("0" + (objDate.getMonth() + 1), 2);

 var sDate   = Right("0" + objDate.getDate(), 2);

 

 return sYear + sMonth + sDate;

}

/*******************************************************************************
 ★ 설명
    Date기본 Format( = yyyyMMdd[hhmiss])를 XP Date기본 Format( = yyyy-MM-dd[ hh:mi:ss] ) 으로 바꾸어줌
 ★ parameter
    1. sDate : yyyyMMdd[hhmiss]형태의 일자 ( 예 : "20121122" 또는 "20121122010203")
 ★ return
    - 성공 = XP Date기본 Format( 예 : "2012-11-22" 또는 "2012-11-22 01:02:03")
    - 실패 = ""
 ★ 주의사항
    sDate는 yyyyMMdd 또는 yyyyMMddhhmiss 형태만 처리된다.
**********************************************************************************/

function fn_Date2XP(sDate)

{

 var ret;

 

 if( fn_IsNull(sDate) )  return "";

 if( sDate.length != 8 && sDate.length != 14 )

  return "";

 

 ret = sDate.substr(0, 4) + "-" + sDate.substr(4, 2)+ "-" + sDate.substr(6, 2);

 if( sDate.length > 8 )

  ret += " " + sDate.substr(8,2) + ":" + sDate.substr(10,2) + ":" + sDate.substr(12,2);

 

 return ret;

}


/******************************************************************************
* Function명 : gfn_dateSum()
* 설명 : 날짜 더하거나 뺀값을 반환하는 메소드
* Params : fixDate - 기준일(2010-01-31) yyyy-MM-dd 형식의 String 값
addYear - 증가하거나 감소할 년도 값
addMonth - 증가하거나 감소할 월값
addDate - 증가하거나 감소할 일값
type - 리턴될 날짜 형식을 지정하는 값(기본값 : yyyyMMdd)
* Return : type == "yyyyMMdd" 결과값 "20100101"
type == "yyMMdd" 결과값 "100101"
type == "yyyy" 결과값 "2010"
type == "yy" 결과값 "10"
type == "MM" 결과값 "01"
type == "dd" 결과값 "01"
******************************************************************************/

function gfn_dateSum(fixDate, addYear, addMonth, addDate, type){

var date = new Date(fixDate.substring(0, 4) + "-" + fixDate.substring(4, 6) + "-" + fixDate.substring(6, 8));

 

date.addYear(addYear);

date.addMonth(addMonth);

date.addDate(addDate);

 

var result = date.getYear() + "" + ((date.getMonth() + 1) + "").padLeft(2, '0') + (date.getDate() + "").padLeft(2, '0');

switch(type){

case "yyyyMMdd" :

return result;

case "yyyyMM" :

return result.substring(0,6);

case "yyMMdd" :

return result.substring(2,8);

case "yyyy" :

return result.substring(0,4);

case "yy" :

return result.substring(2,4);

case "MM" :

return result.substring(4,6);

case "dd" :

return result.substring(6,8);

}

return result;

}

 

 
 
 
 

  

Posted by 농부지기
,

[  Nexacro.Date - 연도, 년월 얻기 및 계산하기 ]

재년도 얻기

현재년도.월 얻기

현재 월 얻기

입력된 날자에 OffSet 으로 지정된 만큼의 달을 더한다.
입력된 날자에 nOffset 으로 지정된 만큼의 월을 증감한다.
두 월간의 차이 월수 계산
현재일의 년/월/주차를 알아냄


 

/******************************************************************************************
 * 기      능 : 현재년도 얻기
 * 반      환 : 현재년도
 *****************************************************************************************/

 function gfn_GetCurrYear(){

    return gfn_getToday().substr(0, 4);

}

 

/******************************************************************************************
 * 기      능 : 현재년도.월 얻기
 * 반      환 : 현재년도.월
 *****************************************************************************************/

 function gfn_GetCurrYYMM(){

    return gfn_getToday().substr(0, 6);

}

 

/******************************************************************************************
 * 기      능 : 현재 월 얻기
 * 반      환 : 현재 월
 *****************************************************************************************/

 function gfn_GetCurrMM(){

    return gfn_getToday().substr(4, 2);

}

 

/******************************************************************************************
 * 기능 : 입력된 날자에 OffSet 으로 지정된 만큼의 달을 더한다.
 * 인자 : psYymm : YYYYMM 형식인 년월
 *         pnOffSet : 추가할 개월 수(+, - 가능) (지정하지 않으면 Default Value = 1 로 적용됩니다)
 * 리턴 : 추가한 년월
 * 예문 :
 *****************************************************************************************/

function gfn_AddMonth(psYymm, pnOffSet){

    if (gfn_IsNull(pnOffSet)) pnOffSet = 1;

 

    var d = new Date(1);//윤달 때문에 꼭넣어야함

    d.setYear(psYymm.substr(0, 4));

    d.setMonth(toNumber(psYymm.substr(4, 2))-1);

    d.toFormatString("%Y-%m-%d", "ko_KR"); // 값셋팅

    

    d.addMonth(pnOffSet);

    return d.toFormatString("%Y%m", "ko_KR");

}

/**********************************************************************************
 ★ 설명
    입력된 날자에 nOffset 으로 지정된 만큼의 월을 증감한다.
 ★ parameter
    1. sDate : 날짜 ( 예 : "20121122" )
    2. nOffset : 월 증감값 ( 예 : 1 또는 -1 )
 ★ return
    - 성공 = yyyyMMdd형태의 증감된 날짜 ( 예 : "20121202" 또는 "20121022" )
    - 실패 = ""
 ★ 주의사항    
    단, 증감된 날짜가 그달의 마지막날짜월보다 큰 경우는 드달의 마지막 날짜를 return한다.
    예를 들어, sDate="20120531", nOffset=-1일 경우 return="20120430" 이 된다.
**********************************************************************************/

function fn_AddMonth(sDate, nOffset)

{

 if( fn_IsNull(sDate) || fn_IsNull(nOffset) )  return "";

 

    var nYear = parseInt(sDate.substr(0, 4));

    var nMonth = parseInt(sDate.substr(4, 2))+nOffset;

    var nDate = parseInt(sDate.substr(6, 2));

    var nLastDate, sRet;

 

  sRet = MakeDate(nYear, nMonth, 1);

    nLastDate = LastDateNum(sRet);

    sRet = sRet.substr(0,6);

    if( nDate > nLastDate )

  sRet += nLastDate.toString();

 else

  sRet += nDate.toString();

  

 return sRet;

}

 

/*******************************************************************************
 ★ 설명
    두 월간의 차이 월수 계산
 ★ parameter
    1. sStartDate : yyyyMMdd형태의 From 일자 ( 예 : "20121122" )
    2. sEndDate   : yyyyMMdd형태의 To 일자 ( 예 : "20131202" )
 ★ return
    - 성공 = 숫자 형태의 차이월수  ( 예 : 10 )
             단, sEndDate < sStartDate이면 음수가 return된다.
    - 실패 = NaN
 ★ 주의사항   
    단, sStartDate, sEndDate의 일은 포함하지 않고 계산된다.
**********************************************************************************/

function fn_DiffMonth(sStartDate, sEndDate)

{

 var nStartMon, nEndMon;

 

 if( fn_IsNull(sStartDate) || fn_IsNull(sEndDate) ) return NaN;

 

 nStartMon = parseInt(sStartDate.substr(0,4), 10)*12 + parseInt(sStartDate.substr(4,2), 10);

 nEndMon = parseInt(sEndDate.substr(0,4), 10)*12 + parseInt(sEndDate.substr(4,2), 10);

 

 return (nEndMon - nStartMon);

}

 

/******************************************************************************************
// 현재일의 년/월/주차를 알아냄

 *****************************************************************************************/

function fpm_fn_weekDayNow(paramDate)

{

    var nDate = paramDate;

    

    var rtnYear,rtnMonth,rtnWeek,wnum;

    var beforeDayCnt = 0;

    var sDate = new Date(nDate.getYear() +"/" + (parseInt(nDate.getMonth()) +1) + "/01");

     

    // 해당일의 요일을 숫자로 가져옴

    wnum = sDate.getDay();    

    

    // 1주차 전에 남아 있는 이전일의 갯수(일요일까지)

    if (wnum < 1){            

        beforeDayCnt = 1;               // 해당월의 시작일이 일요일 이라면

    } else if(wnum > 1) {

        beforeDayCnt = 7 - ( wnum - 1 ); // 해당월의 시작일이 월요일 이후라면

    }

    

    rtnWeek=Math.floor((nDate.getDate() - beforeDayCnt - 1)/7) + 1; // 해당주차가 나옴

 

    if (rtnWeek < 1) {  //틀별 케이스 이전달에 속한 경우

        nDate.addMonth(-1);

        nDate = new Date(nDate.getYear(),nDate.getMonth()+1,"0");

        sDate = new Date(nDate.getYear() +"/" + nDate.getMonth() +1 + "/01");

        wnum = sDate.getDay();

         if (wnum < 1){            

            beforeDayCnt = 1;          

        } else if(wnum > 1) {

            beforeDayCnt = 7 - ( wnum - 1 );

        }

        rtnWeek=Math.floor((nDate.getDate() - beforeDayCnt - 1)/7) + 1;

        rtnYear = nDate.getYear();

        rtnMonth = nDate.getMonth()+1;

        

    } else {

        rtnWeek=Math.floor((nDate.getDate() - beforeDayCnt - 1)/7) + 1;

        rtnYear = nDate.getYear();

        rtnMonth = nDate.getMonth()+1;

    }

    

    return rtnYear + "/" +rtnMonth + "/" + rtnWeek;

}

 

☞  

 
 
 
 

  

Posted by 농부지기
,

                         [  ◎ 연도,년월,일자 검증  ]

- 날짜 형식이 맞는지 확인
- 날짜에 대한 형식 체크
- 년월 형식이 맞는지 확인
- 두 개 일자 비교
- 두 개 년월 비교
- 두 개 년도 비교


/*******************************************************************************
 ★ 설명
    날짜 형식이 맞는지 확인
 ★ parameter
    sDate : yyyyMMdd형태의 날짜 ( 예 : "20121122" )
 ★ return
    - 날짜형식이 맞는 경우 = true
    - 날짜형식이 맞지 않는 경우 = false
    - sDate가 입력되지 않은 경우 = false
******************************************************************************/  

function gfn_IsDate(sDate)

{

 if( fn_IsNull(sDate) )  return false;

 

 if( sDate.length != 8 )

        return false;

 

 if( IsNum(sDate) != true )

        return false;

 

 var nMonth  = parseInt(sDate.substring(4,6), 10);

 var nDate  = parseInt(sDate.substring(6,8), 10);

 

   if( nMonth < 1 || nMonth > 12 )

        return false;

        

    if( nDate < 1 || nDate > LastDateNum(sDate) )

        return false;

 

    return true;

}

 

/******************************************************************************************
 * 기능 : 날짜에 대한 형식 체크
 * 인자 : sFdate   검사일자
 * 리턴 : 유효성반환 (날짜형식이 아닐경우 FLASE)
 * 예문 :
 *****************************************************************************************/

function gfn_DateCheck(sDate)

{

    sDate = sDate.replace(" ", "").replace("-", "").replace("/", "");

 

    if (isNumeric(sDate) == false || gfn_GetDay(sDate) == -1 /*|| datetime(sDate) == datetime("00000101")*/)

    {

        return false;

    }

 

    return true;

}

/******************************************************************************************
 * 기      능 : 년월 형식이 맞는지 확인
 * 함  수  명 : gfn_IsYM()
 * 인      자 : psYM
 * 반      환 : - 년월 형식이 맞으면 true
 *              - 년월 형식이 만지 않으면 false
 *****************************************************************************************/

 function gfn_IsYM(psYM){

    return gfn_IsDate(psYM || "01");

 }

 

/******************************************************************************************
 * 기      능 : 두 개 일자 비교
 * 함  수  명 : gfn_DateCompare
 * 인      자 : psFrom     : 시작일자
 *              psTo       : 종료일자
 *              psCompGubn : 비교 방법 (lessEqual : default, less)
 *              psMsg      : 오류시 메세지 조회 값
 * 반      환 : 시작일자 <= 종료일자  면 정상이면 true
 *               시작일자 <= 종료일자 그렇지 않으면 false
 *               psFrom, psTo : 값이 null이면 true
 * 참      고 :
 *****************************************************************************************/

function gfn_DateCompare(psFrom, psTo, psCompGubn, psMsg){

    // 1. 값 검증

    if (gfn_IsNull(psFrom) || gfn_IsNull(psTo)) return true;

    

    //2. 두 개 컬럼 대소 비교 (첫번째 일자 <= 두번째 일자)

    if (psCompGubn == "lessEqual" || gfn_IsNull(psCompGubn)){

        if (psFrom <= psTo){

            return true;

        }else{

            if (gfn_IsNotNull(psMsg)) alert(psMsg);

            return false;

        }

    }else if (psCompGubn == "less"){

        if (psFrom < psTo){

            return true;

        }else{

            if (gfn_IsNotNull(psMsg)) alert(psMsg);

            return false;

        }

    }

    

    return true;

}

 

/******************************************************************************************
 * 기      능 : 두 개 년월 비교
 * 함  수  명 : gfn_YMCompare
 * 인      자 : psFrom     : 시작년월
 *              psTo       : 종료년월
 *              psCompGubn : 비교 방법 (lessEqual : default, less)
 *              psMsg      : 오류시 메세지 조회 값
 * 반      환 : 시작년월 <= 종료년월  면 정상이면 true
 *               시작년월 <= 종료년월 그렇지 않으면 false
 *               psFrom, psTo : 값이 null이면 true
 * 참      고 :
 *****************************************************************************************/

function gfn_YMCompare(psFrom, psTo, psCompGubn, psMsg){

    return gfn_DateCompare(psFrom || '01', psTo || '01', psCompGubn, psMsg)

}

 

/******************************************************************************************
 * 기      능 : 두 개 년도 비교
 * 함  수  명 : gfn_YearCompare
 * 인      자 : psFrom     : 시작년도
 *              psTo       : 종료년도
 *              psCompGubn : 비교 방법 (lessEqual : default, less)
 *              psMsg      : 오류시 메세지 조회 값
 * 반      환 : 시작년도 <= 종료년도  면 정상이면 true
 *               시작년도 <= 종료년도 그렇지 않으면 false
 *               psFrom, psTo : 값이 null이면 true
 * 참      고 :
 *****************************************************************************************/

function gfn_YearCompare(psFrom, psTo, psCompGubn, psMsg){

    return gfn_DateCompare(psFrom || '0101', psTo || '0101', psCompGubn, psMsg)

}

 
 

  

 

Posted by 농부지기
,

[ MS SQL.Trigger - 예제2 ]

변수 정의해서 INSERTED 와 DELETED 를 SELECT 한 예제

 

CREATE TRIGGER TRG_TBL_MICHAK_INST ON TBL_MICHAK

FOR INSERT AS

 

DECLARE

    @Old_in_amt                     DECIMAL(10),

    @Comp_amt                      DECIMAL(10),

    @d_in_numb                     CHAR(11),

    @d_prat_row_id               DECIMAL(12),

    @i_item_dist_unit            DECIMAL(10)

 

SELECT @d_in_numb = IN_NUMB,   @d_prat_row_id = PRAT_ROW_ID

FROM   DELETED;

 

SELECT @i_item_dist_unit = ITEM_DIST_UNIT

FROM   INSERTED;

 

SELECT @TS_PURC_NUMB = PURC_NUMB,      @TS_IN_NUMB = IN_NUMB,

FROM   TBL_INPUT_DETA

WHERE  PRAT_ROW_ID = @d_prat_row_id;

 

SELECT @Comp_amt  = @Old_in_amt - @d_item_dist_unit + @i_item_dist_unit ;

                

UPDATE TBL_INPUT_DETA

SET    PRC   = @Comp_unit,        AMT   = @Comp_amt

WHERE  IN_NUMB       = @d_in_numb

AND    PRAT_ROW_ID = @d_prat_row_id ;

 

IF @d_cost_gubn = '5‘ OR @d_cost_gubn = ‘7’

   begin

      UPDATE TBL_PRATIQUE_DETAIL

      SET    DIST_QTY  = DIST_QTY  - @d_this_dist_qty + @i_item_dist_unit

      WHERE  PRAT_NO   = @d_prat_no

      AND    CODE_ITEM  = @d_code_item

   end   

ELSE

   begin

       …

   end

Print ‘난 Trigger 문이야….’

 

 

정의 :

- @ : 변수 정의 시 @를 붙여야 한다. 그리고 사용시에도 항상 @를 붙인다.

 

- SELECT 문법이 조금 변경 되었음. (INTO 문장이 없다)

 

- 계산식에도 SELECT 를 앞쪽에 기입해야 한다.

 

 -문장을 기입시         begin

                                            …….

                                     end 를 두어야 한다.

 

- 문장 끝에   ; (콜론)을 넣이 않아도 된다.

 

- if 문장에서 then , end if   라는 예약어가 없다.

 

- print 문을 사용 하면 Query Analyzer 를 사용시에는 흐름을 볼 수 있지만

  Application에서 작업시는 Error 로 인식 한다 (ROLLBACK 됨)

 

- DataWindow로 UPDATE() function 을 사용해서 저장시 Print 문을 만나면

  다음과 같이 Error 로 인식한다.

 

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제1  (0) 2017.01.27
MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 예제1 ]

 

1.

CREATE TRIGGER TRG_TBL_BL_DETAIL_INST ON TBL_BL_DETAIL

FOR INSERT AS

 

IF  NOT UPDATE(BL_QTY)   RETURN

 

DECLARE @tmp_qty    DECIMAL(10),

                   @tmp_num  DECIMAL(10)

 

SELECT @tmp_qty = 10;

 

SELECT @tmp_num = 20;

 

UPDATE TBL_OFFER_DETAIL

SET    ALL_BL_QTY = ALL_BL_QTY + I.BL_QTY + @tmp_qty + @tmp_num

FROM   TBL_OFFER_DETAIL A, INSERTED I

WHERE  A.OFFER_NO   = I.OFFER_NO

AND    A.CODE_ITEM    = I.CODE_ITEM

 

 

2.

CREATE TRIGGER TRG_TBL_BL_DETAIL_UPDT ON TBL_BL_DETAIL

FOR UPDATE AS

 

UPDATE TBL_OFFER_DETAIL

SET    ALL_BL_QTY = ALL_BL_QTY - D.BL_QTY + I.BL_QTY

FROM   TBL_OFFER_DETAIL A, INSERTED I,  DELETED D

WHERE  A.OFFER_NO   = I.OFFER_NO

AND    A.CODE_ITEM    = I.CODE_ITEM

AND    A.OFFER_NO      = D.OFFER_NO

AND    A.CODE_ITEM    = D.CODE_ITEM

 

 

정의 :

- DELETED 와 INSERTED 라는 가상테이블과 물리적으로 존재 하는 테이블

  간에 JOIN 으로 문장을 구성 할 수 있다.

 

-. IF NOT UPDATE(BL_QTY) RETURN : 이란 BL_QTY 수량이 변경이

   되지 않았을 경우에는 RETURN 해라는 뜻.

   즉, Trigger 를 더 이상 작동 하지 말라는 문장이다.

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제2  (0) 2017.01.27
MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 종류 ]

 

1. 중첩 트리거 : 트리거가 동작해서 다른 테이블의 값을 변경한다면 이런 동작을 CASCASE INSERT(또는 UPDATE, DELETE) 라고 한다.

                            이렇게 CASCADE 동작을 할 때 대상이 되는 테이블에 또 트리거가 걸려 있다면 이 트거리는 도 동작 하게 된다.

                            이런식으로 중첩 트리거는 SQL7.0에서 32단계 까지 동작 할 수 있다.

    - 중첩트리거 중지 :  sp_configure ‘nested trigger’, 0                       à 1로 해주면 실행 됨

                                       GO

                                       reconfigure

                                       GO

 

2. 재귀 트리거(Recursive Trigger) : 트리거가 자기 자신을 다시 부르는 것을 재귀 트리거라고 한다. 이때 무한 루프에 빠지지 않도록 빠져 나오는 루틴을

                             처리해야만 한다. 재귀트리거는 default 가 off 되어 있다.

                             - on :   exec sp_dboption ‘db_name’, ‘recursive triggers’, true

                             - 재귀 트리거 빠져 나오기 : @@nestlevel system 변수 사용

                             - 예)  CREATE   TRIGGER   trgInsert on t3  for insert as

                                      set nocount on

                                     declare @id int,    @level int;

                                     select @id = object_id(‘trgInsert’)

                                     select @level = trigger_nestlevel(@id)

                                     if @level > 5

                                        begin

                                             set nocount off

                                             return

                                        end

                                     ……..

                                     set nocount off

 

* 트리거가 계속 진행시 32단계 까지 진행 후 SQL 서버가 취소를 시키고 모든 트랜잭션이 취소된다..   

 

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제2  (0) 2017.01.27
MS SQL.Trigger - 예제1  (0) 2017.01.27
MS SQL.Trigger - 특징  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
Posted by 농부지기
,

[ MS SQL.Trigger - 특징 ]

 

1. 숨어있는 두 테이블 : INSERTED 와 DELETED 라는 두 논리적 테이블, 임시적 저장 공간, 논리적 저장 공간, 가상테이블에 자료를 가지고 있게 된다.

                                         (임시적이란, 트랜잭션이 끝나면 없어진다는 뜻,  논리적이란 디스크 상에 존재하는 테이블이 아니라는 뜻)

    - INSERTED  : 새로 삽입된 행을 저장             

    - DELETED   : 삭제된 행을 저장

   : 트랜잭션이 끝날 때 까지 자료가 남아 있다.

2. 테이블이 UPDATE 가 되면 실제로는 해당 자료를 Delete 하고 Insert 하게 된다.

    그래서 UPDATE 시는  INSERTED 와 DELETED 가 동시에 존재 한다.

'(DB) MS SQL > Trigger' 카테고리의 다른 글

MS SQL.Trigger - 예제1  (0) 2017.01.27
MS SQL.Trigger - 종류  (0) 2017.01.27
MS SQL.Trigger - 해법  (0) 2017.01.27
MS SQL.Trigger - 문법  (0) 2017.01.27
MS SQL.Trigger - 단점  (0) 2017.01.27
Posted by 농부지기
,