posted by 지긋이 2019. 12. 2. 15:12

생각보다 빈번하게 사용하는 거라 정리 한번.

1. 문자 -> 날짜(타입바꾸기)로 변경
calcu_formatChk(reqYmd);

function calcu_formatChk(ymd){ //형식이 yyyymmdd일 경우 . 만약 하이픈(-)이 포함되어 있다면 변환작업 후 진행(3번)
        var yyyy = ymd.substr(0,4); 
        var mm = ymd.substr(4,2); 
        var dd = ymd.substr(6,2);                         
         
      calcu_ymd = new Date(yyyy, mm-1, dd); 
       //console.log(ymd +"|결과 : " + calcu_ymd + "/n 월Chk : " + (calcu_ymd.getMonth()+1)); 
       return calcu_ymd; 
    }

2. 날짜 차이 구하기
getDayFromToCalDay(dt1, dt2);

function getDayFromToCalDay(dt1, dt2) { //Date 타입 혹은 YYYYMMDD로 들어왔을 때
        var diffDate_1 = dt1 instanceof Date ? dt1 :new Date(dt1);  //Test 필요(Date가 아닐 때 1번으로 연결하면 될 듯)
        var diffDate_2 = dt2 instanceof Date ? dt2 :new Date(dt2);  //Test 필요(Date가 아닐 때 1번으로 연결하면 될 듯)
                 
        var calDay = Math.abs(diffDate_2.getTime() - diffDate_1.getTime()); //시간으로 계산
        calDay = Math.ceil(calDay / (1000 * 3600 * 24)); //날짜로 변환
        //console.log(dt1+"|"+dt2+"\n날짜비교>>"+diffDate_1+"|"+diffDate_2+"||"+calDay); 
        return calDay
    }

3. 하이픈 포함된 날짜 하이픈 제거해서 반환
formatDate(searchApplYmd,"-");

// 날짜 포맷을 적용한다.. 
    function formatDate(strDate, saper) { 
        if(strDate == "" || strDate == null) { 
            return ""; 
        } 

        try { 
            if(strDate.length == 10) { //YYYY-MM-DD
                return strDate.substring(0,4)+saper+strDate.substring(5,7)+saper+strDate.substring(8,10); 
            } else if(strDate.length == 8) { 
                return strDate.substring(0,4)+saper+strDate.substring(4,6)+saper+strDate.substring(6,8); 
            } else { 
                return ""; 
            } 
        } catch(e) { 
            return ""; 
        } 
    }

posted by 지긋이 2019. 11. 27. 10:24

업체로부터 요청사항이 이렇게 들어왔다.

최초 로딩시 Cell값은 빈칸으로 로딩되고 합계값만 표기해 주세요.
단, 해당 값은 기존에 있던 값과 같이 합계가 나와야합니다.

해당 Cell은 IBSheet를 사용하여 AutoSum을 구하고 있었는데 기존 값은 값대로 처리가 되어야 했으므로
기존값은 숨김처리하고 Temp Cell을 이용하여 처리해야 하는데 상단 Row값을 공백 처리하면 합계값도 0이 되는 상황 
IBSheet의 Type을 Int로 적용했는데 숫자의 콤마처리가 되지 않았다.

그래서 여러가지를 생각해봤는데
1. 쿼리에서 Text로 콤마를 붙여서 갖고 오는 방법(SUM을 구한후 포맷처리해야해서 쿼리를 좀 뜯어고쳐야...)
2. IBSheet 상 다른 콤마 처리를 찾아 보는 것
- IBSheet상 Type과 Format 처리는 바꿔도 동일. 간단할거 같았지만(?) 더 찾아보려면 많은 시간이 소요될 것 같았다...

그래서 생각한 가장 효과적인 방법은 기존 값의 AutoSum 합계값은 갖고 오고 스크립트로 콤마처리

예시) 보이는 1차값(Mon01Temp)은 Mon01 합계만 set한다.     
//쿼리에서는 mon01Temp 값을 세팅하지 않는다.
    var mon01SumSet = sheet1.GetCellValue(sheet1.LastRow(), "mon01");
    sheet1.SetCellValue(sheet1.LastRow(), "mon01Temp",addComma(mon01SumSet));

function addComma(num) {
  var regexp = /\B(?=(\d{3})+(?!\d))/g; //정규식
  return num.toString().replace(regexp, ',');
}

참고 https://webisfree.com/2016-08-29/[%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8]-%EC%88%AB%EC%9E%90-%ED%83%80%EC%9E%85%EA%B0%92%EC%97%90-%EC%BD%A4%EB%A7%88-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95