반응형

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
    }
}
반응형
// EX) fnSetWeekDate("20201202","1week");

function fnSetWeekDate(vNow, vDate) 
{
	var vPrevDate;
	//var vNowDate = new Date().getFullYear() + "-" + _pad(new Date().getMonth() + 1, 2) + "-" + + _pad(new Date().getDate(), 2);

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

	var d = new Date(vMM+"/"+vDD+"/"+vYYYY);
	var dayOfMonth = d.getDate();
	var monthOfYear = d.getMonth();

	if (vDate == "1week") 
	{
		d.setDate(dayOfMonth + 7);
		vPrevDate = d.getFullYear() + _pad(d.getMonth() + 1, 2) + _pad(d.getDate(), 2);
	}
	else if (vDate == "1month") 
	{
		d.setMonth(monthOfYear + 1);
		vPrevDate = d.getFullYear() + _pad(d.getMonth() + 1, 2) + _pad(d.getDate(), 2);
	}
	else if (vDate == "3month") 
	{
		d.setMonth(monthOfYear + 3);
		vPrevDate = d.getFullYear() + _pad(d.getMonth() + 1, 2) + _pad(d.getDate(), 2);
	}

	return vPrevDate;
}

 

_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;
}
반응형
DateTime.Now.ToString("yyyyMMddHHmmssFFF");

 

반응형
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;
}

이상입니다~

+ Recent posts