Nexacro-컴포넌트/JavaScript Nexacro - 날짜관련 Javascript 농부지기 2017. 1. 19. 14:26 [ Nexacro - 날짜관련 Javascript ] /*** System Name : SKU/lib Job Name : Common File Name : xDate.xjs Make Date : Description : 공통 Date 사용 함수 모음 Modify Date Modifier Modify Description ****/ /** 현재 날짜 (YYYYMMDD) */ function gfn_getToday() { var objDate = new Date(); var s = objDate.getFullYear() + ((objDate.getMonth() + 1) + "").padLeft(2, '0') + (objDate.getDate() + "").padLeft(2, '0'); return (s); } /* 현재 날짜시간값 14자리 */ function gfn_getDateTime() { var objDate = new Date(); var sDateTime = gfn_getToday()+ (objDate.getHours() + "").padLeft(2, '0')+ (objDate.getMinutes() + "").padLeft(2, '0')+ (objDate.getSeconds() + "").padLeft(2, '0'); return sDateTime; } /* 현재 시간값(시분초) 6자리 */ function gfn_getTime() { var objDate = new Date(); var sTime = (objDate.getHours() + "").padLeft(2, '0')+ (objDate.getMinutes() + "").padLeft(2, '0')+ (objDate.getSeconds() + "").padLeft(2, '0'); return sTime; } /* 해당일의 요일값을 리턴 @param sDate 'yyyyMMdd' @return 0 = 일요일 ~ 6 = 토요일 */ function gfn_getDay(sDate) { var objDate = new Date(); objDate.setFullYear(parseInt(sDate.substr(0,4)), parseInt(sDate.substr(4,2))-1, parseInt(sDate.substr(6,2))); objDate.setHours(0, 0, 0); objDate.setMilliseconds(0); return objDate.getDay(); } /* Add Month @param sMonth 'yyyyMM' @param nOffSet 증감 단위 숫자 @return 'yyyyMM' / function gfn_addMonth(sMonth, nOffSet) { var date = new Date(); date.setYear(String(sMonth).substr(0, 4)); date.setMonth(String(sMonth).substr(4, 2)-1-(nOffSet*-1)); return gfn_getDateToStr(date).substr(0, 6); } /* Add Date @param sDate 'yyyyMMdd' @param nOffSet 증감 단위 숫자 @return 'yyyyMMdd' / function gfn_addDate(sDate, nOffSet) { var date = new Date(); sDate = (String)(sDate); date.setFullYear(parseInt(sDate.substr(0,4)), parseInt(sDate.substr(4,2))-1, parseInt(sDate.substr(6,2)-(nOffSet*-1))); return gfn_getDateToStr(date); } /* 해당월의 마지막날을 리턴 @param sMonth 'yyyyMM' @return Number */ function gfn_getMonthLastDay(sMonth) { var iLastDay; var iYear = parseInt(String(sMonth).substr(0, 4),10) ; var iMonth = parseInt(String(sMonth).substr(4, 2),10); switch(iMonth) { case 2 : if( ((iYear%4)==0) && ((iYear%100)!=0) || ((iYear%400)==0) ) iLastDay = 29; else iLastDay = 28; break; case 4 : case 6 : case 9 : case 11 : iLastDay = 30; break; default: iLastDay = 31; break; } return iLastDay; } /* 해당일이 속한 주의 월요일 날짜를 리턴 @param sDate yyyyMMdd @return yyyyMMdd */ function gfn_getMondayDate(sDate) { var objDate = new Date(); objDate.setFullYear(parseInt(sDate.substr(0,4)), parseInt(sDate.substr(4,2))-1, parseInt(sDate.substr(6,2))); var i = objDate.getDay(); var iDayCnt = (i == 0)?-6:1-i; var dateMon = new Date(objDate.getYear(), objDate.getMonth(), objDate.getDate() + iDayCnt); return gfn_getDateToStr(dateMon); } /* Date 형을 String 형으로 변환 @param date Date Type @return yyyyMMdd */ function gfn_getDateToStr(date) { if (gfn_isNull(date)) return; var sYear = date.getYear().toString(); var sMonth = (date.getMonth()+1).toString(); var sDate = date.getDate().toString(); if(sYear.length==2) sYear = '19'+sYear; else if(sYear.length==1) sYear = '190'+sYear; if(sMonth.length==1) sMonth = '0'+sMonth; if(sDate.length==1) sDate = '0'+sDate; return sYear+sMonth+sDate; } /* 날짜 검증 @param sDate yyyyMM or yyyyMMdd, ex) "201308" or "20130801" @return boolean */ function gfn_isDate(sDate){ var retVal; switch(sDate.length) { case 6://yyyyMM retVal = gfn_isYM(sDate); break; case 8://yyyyMMdd retVal = gfn_isYMD(sDate); break; default: retVal = false; break; } return retVal; } /* 년월 날짜 검증 @param sDate yyyymm, ex) "201308" @return boolean */ function gfn_isYM(sDate){ if (sDate.length != 6 || !isNumeric(sDate)) { return false; } var nYear = toNumber(String(sDate).substr(0,4)); var nMonth = toNumber(String(sDate).substr(4,2)); if((nMonth < 1) || (nMonth > 12)) { return false; } return true; } /* 년월일 날짜 검증 @type void @param sDate yyyyMMdd, ex) "20130801" @return boolean / function gfn_isYMD(sDate) { if( gfn_isNull(sDate) ){ return false; } if (sDate.length != 8 || !isNumeric(sDate)) { return false; } var sYM = String(sDate).substr(0,6); // yyyymm if (!gfn_isYM(sYM)) { return false; } var nDay = toNumber(String(sDate).substr(6,2)); // dd var nLastDay = gfn_getMonthLastDay(sYM); if (nDay < 1 || nDay > nLastDay) { return false; } return true; } /* 해당일의 년주차 리턴 @param sDate yyyyMMdd, ex) "20130801" @return number */ function gfn_getWeekNo(sDate){ if(gfn_isYMD(sDate) == false) return -1; var objDate = new Date(); //objDate.setYear(String(sDate).substr(0, 4)); //objDate.setMonth(String(sDate).substr(4, 2) - 1); //objDate.setDate(String(sDate).substr(6, 2)); objDate.setFullYear(parseInt(sDate.substr(0,4)), parseInt(sDate.substr(4,2))-1, parseInt(sDate.substr(6,2))); objDate.setHours(0, 0, 0); objDate.setMilliseconds(0); return objDate.getWeekNo(); } /* 두 날짜 크기 비교 @param sFormDate yyyyMMdd ex) "20130801" @param sToDate yyyyMMdd ex) "20130830" @return 1. The date is equal to two : return 0 2. sFormDate < sToDate : return -1 3. sFormDate > sToDate : return 1 4. Unless the date format : return null / function gfn_compareDate(sFormDate, sToDate) { var retVal = null; if (gfn_isDate(sFormDate) && gfn_isDate(sToDate)) { if (sFormDate == sToDate) { retVal = 0; } else if (sFormDate < sToDate) { retVal = -1; } else if (sFormDate > sToDate) { retVal = 1; } } return retVal; } /* 주어진 날짜의 Mask Format 처리된 문자열 리턴 @param sDate 'yyyyMMdd' @return String */ function gfn_dateFormatString(sDate, sFormat) { if(typeof sDate === 'object'){ sDate = sDate.toString(); } var objDate = new Date(); objDate.setFullYear(parseInt(sDate.substr(0,4)), parseInt(sDate.substr(4,2))-1, parseInt(sDate.substr(6,2))); objDate.setHours(0, 0, 0); objDate.setMilliseconds(0); return objDate.getFormatString(sFormat); } /* Grid Calendar open (주차표시 달력) @param objGrid Grid object @param e Event Object */ function gfn_gridWkCalendar(obj:Grid, e) { if(!isValidObject("_pdvWkCal")){ var objPopupDiv = new PopupDiv("PopupDiv", 0, 0, 237, 195); this.addChild("_pdvWkCal", objPopupDiv); objPopupDiv.url = "common::PdvWkCalendar.xfdl"; objPopupDiv.show(); } _pdvWkCal.fn_crCal(); try{ var _retVal = _pdvWkCal.trackPopup(toNumber(system.cursorx), toNumber(system.cursory)); var arrRet = _retVal.toString().split(","); this.removeChild("_pdvWkCal"); return arrRet[0]; }catch(e){return "";} } /* 주단의 선택 달력 */ function gfn_weekSelectCalendar() { if(!isValidObject("_pdvWeekSelectCal")){ var objPopupDiv = new PopupDiv("PopupDiv", 0, 0, 237, 195); this.addChild("_pdvWeekSelectCal", objPopupDiv); objPopupDiv.url = "common::PdvWeekSelectCalendar.xfdl"; objPopupDiv.show(); } _pdvWeekSelectCal.fn_crCal(); try{ var _retVal = _pdvWeekSelectCal.trackPopup(toNumber(system.cursorx), toNumber(system.cursory)); var arrRet = _retVal.toString().split(","); this.removeChild("_pdvWeekSelectCal"); return arrRet[0]; }catch(e){return "";} } //-----------------------------------------------------------------------------------------// /* 주차계산함수 추가 */ Date.prototype.getWeekNo = function(){ // Create a copy of this date object var target = new Date(this.valueOf()); // ISO week date weeks start on monday // so correct the day number var dayNr = (this.getDay() + 6) % 7; // ISO 8601 states that week 1 is the week // with the first thursday of that year. // Set the target date to the thursday in the target week target.setDate(target.getDate() - dayNr + 3); // Store the millisecond value of the target date var firstThursday = target.valueOf(); // Set the target to the first thursday of the year // First set the target to january first target.setMonth(0, 1); // Not a thursday? Correct the date to the next thursday if(target.getDay() != 4) { target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7); } // The weeknumber is the number of weeks between the // first thursday of the year and the thursday in the target week return 1 + Math.ceil((firstThursday - target) / 604800000); } /* 축약 월명칭 정의 */ Date.prototype.monthShortName = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; /* Date format 함수 */ Date.prototype.getFormatString = function(sFormat){ if(!this.valueOf()) return ""; var dt = this; var arrMask = dt.parseDateFormat(sFormat), arrDt = [], mask, h; for(var i = 0, len = arrMask.length; i < len; i++){ mask = arrMask[i]; if(mask > -1){ arrDt[arrDt.length] = sFormat.charAt(mask); }else{ switch(mask){ case "yyyy": arrDt[arrDt.length] = dt.getFullYear(); break; case "yy": arrDt[arrDt.length] = new String(dt.getFullYear() % 1000).padLeft(2,'0'); break; case "MM": arrDt[arrDt.length] = new String(dt.getMonth() + 1).padLeft(2,'0'); break; case "MMM": arrDt[arrDt.length] = dt.monthShortName[dt.getMonth()]; break; case "dd": arrDt[arrDt.length] = new String(dt.getDate()).padLeft(2,'0'); break; case "HH": arrDt[arrDt.length] = new String(dt.getHours()).padLeft(2,'0'); break; case "hh": arrDt[arrDt.length] = new String(((h = dt.getHours() % 12) ? h : 12)).padLeft(2,'0'); break; case "mm": arrDt[arrDt.length] = new String(dt.getMinutes()).padLeft(2,'0'); break; case "ss": arrDt[arrDt.length] = new String(dt.getSeconds()).padLeft(2,'0'); break; case "sss": arrDt[arrDt.length] = new String(dt.getMilliseconds()).padLeft(3,'0'); break; case "tt": arrDt[arrDt.length] = dt.getHours() < 12 ? pThis.ttName[0] : pThis.ttName[1]; break; case "M": arrDt[arrDt.length] = new String(dt.getMonth() + 1); break; case "d": arrDt[arrDt.length] = new String(dt.getDate()); break; case "H": arrDt[arrDt.length] = new String(dt.getHours()); break; case "h": arrDt[arrDt.length] = new String(((h = dt.getHours() % 12) ? h : 12)); break; case "m": arrDt[arrDt.length] = new String(dt.getMinutes()); break; case "s": arrDt[arrDt.length] = new String(dt.getSeconds()); break; case "W": arrDt[arrDt.length] = new String(dt.getWeekNo()); break; } } }//for return arrDt.join(""); } /* Date format Cache */ Date.prototype._dateMaskCache = {}; /* Date format 파싱 */ Date.prototype.parseDateFormat = function(sMask){ var dt = this; var res = dt._dateMaskCache[sMask]; if(res) return res; var arrMask = [], tokenStr, seq = 0, bEscape = false, bQuote = false, maskArr = sMask.split(""), sTmp; for(var i = 0, len = maskArr.length; i < len; ){ tokenStr = maskArr[i]; if(bEscape == false && tokenStr == "'"){ // Mask가 Quotation이 시작될 경우. if(bQuote == false) bQuote = true; else bQuote = false; i++; continue; } if(bEscape == false && tokenStr == "\\" && !bQuote){ // Mask에서 Escape에 진입할 경우. bEscape = true; i++; continue; }else if(bEscape){ // Mask에서 Escape를 사용할 경우. arrMask[seq] = i; seq++; bEscape = false; }else if(bQuote == false){// Mask에서 Quotation 밖의 글자에 대해. sTmp = sMask.substr(i, 4); if(sTmp == "yyyy" || sTmp == "MMMM" || sTmp == "dddd"){ //yyyy, MMMM, dddd arrMask[seq] = sTmp; i += 4; seq++; continue; } sTmp = sMask.substr(i, 3); if(sTmp == "MMM" || sTmp == "ddd" || sTmp == "sss"){ //MMM, ddd, sss arrMask[seq] = sTmp; i += 3; seq++; continue; } sTmp = sMask.substr(i, 2); if(sTmp == "yy" || sTmp == "MM" || sTmp == "dd" || sTmp == "HH" || sTmp == "mm" || sTmp == "ss" || sTmp == "hh" || sTmp == "tt" || sTmp == "tt" ) // yy, MM, dd, HH, mm , ss, tt, WW { arrMask[seq] = sTmp; i += 2; seq++; continue; } if(tokenStr == "M" || tokenStr == "d" || tokenStr == "H" || tokenStr == "h" || tokenStr == "m" || tokenStr == "s" || tokenStr == "W" ) // M, d, H, h, m, s, W { arrMask[seq] = tokenStr; seq++; }else{ arrMask[seq] = i; seq++; } } i++; } //for dt._dateMaskCache[sMask] = arrMask; return arrMask; } /* Grid From Date, To Date 동시 선택 달력 */ function gfn_gridFromToCalendar(pFromDate, pToDate) { if(!isValidObject("_pdvWkCal")){ var objPopupDiv = new PopupDiv("PopupDiv", 0, 0, 485, 235); this.addChild("_pdvWkCal", objPopupDiv); objPopupDiv.url = "common::PdvPeriodCalendar.xfdl"; objPopupDiv.show(); if(!gfn_isNull(pFromDate)){ objPopupDiv.fv_msStDate = pFromDate; } if(!gfn_isNull(pToDate)){ objPopupDiv.fv_msEdDate = pToDate; } } _pdvWkCal.fn_crCal(); try{ var _retVal = _pdvWkCal.trackPopup(toNumber(system.cursorx), toNumber(system.cursory)); var arrRet = _retVal.toString().split(","); //var arrRet = _retVal.toString(); this.removeChild("_pdvWkCal"); return arrRet; }catch(e){return "";} } 저작자표시 (새창열림)