반응형

오랜만에 또 개발 관련된 블로그를 적습니다.

 

현재 기준으로 저번달 첫일 , 다음달 말일을 구해서 세팅해야 되서 아래와 같이 구현하였습니다.

 

하나의 함수로 사용하기 위해 파라미터는 '현재날짜' , '이전 , 다음'을 넣어두었습니다

 

코드는 아래와 같이 사용 하면 됩니다.

 

//vDate : yyyymmdd or yyyy-mm-dd / vType : Prev(이전달) , Next(다음달)
function fnSetPrevNextDate(vDate, vType) {

    var vValue = vDate;
    var vValue_Num = vValue.replace(/[^0-9]/g, "");

    if (_fnToNull(vValue_Num) == "") {
        _fnAlertMsg("날짜를 입력 해 주세요.");
        return false;
    }

    //8자리가 아닌 경우 false
    if (vValue_Num.length != 8) {
        _fnAlertMsg("날짜를 20200101 or 2020-01-01 형식으로 입력 해 주세요.");
        return false;
    }

    var vYYYY = vValue_Num.substring(0, 4);
    var vMM = vValue_Num.substring(4, 6);
    var vDD = vValue_Num.substring(6, 8);

    var d = new Date(vMM + "/" + vDD + "/" + vYYYY);
    var monthOfYear = d.getMonth();
    
    if (vType == "Prev") {
        d.setMonth(monthOfYear - 1);
        vValue = d.getFullYear() + "-" + _pad(d.getMonth() + 1, 2) + "-" + "01";
    }
    else if (vType == "Next") {
        d.setMonth(monthOfYear + 1);
        var vDate = new Date(d.getFullYear(), d.getMonth() + 1, 0);
        vValue = vDate.getFullYear() + "-" + _pad(vDate.getMonth() + 1, 2) + "-" + _pad(vDate.getDate(), "2");
    }    

    return vValue;
}

 

//숫자 width만큼 앞에 0 붙혀주는 함수 EX) widht = 2일떄 1은 01로 찍힘
function _pad(n, width) {
    n = n + '';
    return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
}
반응형

2024. 05. 20

- 날짜의 간격을 음수로 받아야 되는 경우가 있어서 해당 부분 주석으로 설명 넣어두었음.

- Math.abs (절대값)을 제거하면 음수로 받을 수 있음.

//날짜 차이 , 간격 일수 함수 (yyyymmdd , yyyy-mm-dd)
function _fnCompareDay(vValue1, vValue2) {
	var rxDatePattern = /^(\d{4})(\d{1,2})(\d{1,2})$/; //Declare Regex    
	
	if (vValue1.length > 7 && vValue2.length > 7) {
	
		//- replaceAll
		var dtArray1 = vValue1.replace(/-/gi, "").match(rxDatePattern); //기준 날짜
		var dtArray2 = vValue2.replace(/-/gi, "").match(rxDatePattern); //비교 날짜
	
		//0 => 현재 날짜 / 1 => yyyy / 2 => mm / 3 => dd
		var vSDate = new Date(parseInt(dtArray1[1]), parseInt(dtArray1[2]) + 1, parseInt(dtArray1[3]));
		var vEDate = new Date(parseInt(dtArray2[1]), parseInt(dtArray2[2]) + 1, parseInt(dtArray2[3]));
	
    		//추가 : 만약 날짜 차이를 음수로 받고 싶다면 Math.abs를 제거
		var vGapDay = Math.abs(vEDate.getTime() - vSDate.getTime());
		vGapDay = Math.ceil(vGapDay / (1000 * 3600 * 24));
	
		return vGapDay;
	} else {
		return "N";
	}
}
반응형
var startDate = new Date(new Date().getFullYear(), new Date().getMonth() + 1, 1);
var endDate = new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0);

var startOfDay = startOfDay.getFullYear() + "-" + startOfDay.getMonth() + "-" + startOfDay.getDate()
var endOfDay = endOfDay.getFullYear() + "-" + startOfDay.getMonth() + "-" + endOfDay.getDate()

결과 : yyyy-m-d

 

만약 8자리로 쓰고싶으면 아래 _pad 함수에 넣어서 쓰면 됩니다.

var startOfDay = startOfDay.getFullYear() + "-" + _pad(startOfDay.getMonth(),2) + "-" + _pad(startOfDay.getDate(),2);
var endOfDay = endOfDay.getFullYear() + "-" + _pad(startOfDay.getMonth(),2) + "-" + _pad(endOfDay.getDate(),2);

결과 yyyy-mm-dd

function _pad(n, width) {
    n = n + '';
    return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
}
반응형

[2021.04.23 추가]

생각보다 많이 찾아주셔서 추가 설명 합니다.

_fnisDate에는 yyyy-mm-dd 식으로 보내도 되고 yyyymmdd 식으로 보내도 상관 없습니다.

//날짜 유효성 체크 (윤달 포함)
function _fnisDate(vDate) {
	var vValue = vDate;
	var vValue_Num = vValue.replace(/[^0-9]/g, ""); //숫자를 제외한 나머지는 예외처리 합니다.
	
    //_fnToNull 함수는 아래 따로 적어두겠습니다. 
	if (_fnToNull(vValue_Num) == "") {
		alert("날짜를 입력 해 주세요.");
		return false;
	}

	//8자리가 아닌 경우 false
	if (vValue_Num.length != 8) {
		alert("날짜를 20200101 or 2020-01-01 형식으로 입력 해 주세요.");
		return false;
	}
	
    //8자리의 yyyymmdd를 원본 , 4자리 , 2자리 , 2자리로 변경해 주기 위한 패턴생성을 합니다.
	var rxDatePattern = /^(\d{4})(\d{1,2})(\d{1,2})$/; 
	var dtArray = vValue_Num.match(rxDatePattern); 

	if (dtArray == null) {
		return false;
	}

	//0번째는 원본 , 1번째는 yyyy(년) , 2번재는 mm(월) , 3번재는 dd(일) 입니다.
	dtYear = dtArray[1];
	dtMonth = dtArray[2];
	dtDay = dtArray[3];

	//yyyymmdd 체크
	if (dtMonth < 1 || dtMonth > 12) {
		alert("존재하지 않은 월을 입력하셨습니다. 다시 한번 확인 해주세요");
		return false;
	}
	else if (dtDay < 1 || dtDay > 31) {
		alert("존재하지 않은 일을 입력하셨습니다. 다시 한번 확인 해주세요");
		return false;
	}
	else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31) {
		alert("존재하지 않은 일을 입력하셨습니다. 다시 한번 확인 해주세요");
		return false;
	}
	else if (dtMonth == 2) {
		var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
		if (dtDay > 29 || (dtDay == 29 && !isleap)) {
			alert("존재하지 않은 일을 입력하셨습니다. 다시 한번 확인 해주세요");
			return false;
		}
	}

	return true;
}

_fnToNull 

데이터가 들어왔을떄 undefined 혹은 null일 경우 빈칸으로 넘기는 공통 함수 입니다.

//Null 값 ""
function _fnToNull(data) {
    // undifined나 null을 null string으로 변환하는 함수. 
    if (String(data) == 'undefined' || String(data) == 'null') {
        return ''
    } else {
        return data
    }
}
반응형
new Date().getFullYear() + _pad(new String(new Date().getMonth() + 1), 2) + _pad(new String(new Date().getDate()), 2)

이거 한줄이면 바로 현재날짜 볼 수 있음

YYYYMMDD 입니다.

 

new Date().getFullYear() + "-" + _pad(new String(new Date().getMonth() + 1), 2) + "-" + _pad(new String(new Date().getDate()), 2);

YYYY-MM-DD

 

new Date().getFullYear() + "." + _pad(new String(new Date().getMonth() + 1), 2) + "." + _pad(new String(new Date().getDate()), 2);

YYYY.MM.DD

 

_pad함수

//숫자 width만큼 앞에 0 붙혀주는 함수 EX) widht = 2일떄 1은 01로 찍힘
function _pad(n, width) {
    n = n + '';
    return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
}

이상입니다~

반응형

[2021.05.07]

YYYYMMDD 데이터를 넣어주면 YYYY-MM-DD 형식으로 변경 시켜 줍니다.

 

//YYYYMMDDD => YYYY-MM-DD
function fnSetYYYYMMDD(vDate){
	var vformat = String(vDate);  (vCount String형변환)
	vformat = vformat.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3'); 
	
	return vformat
}

 

+ Recent posts