[ 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 농부지기
,