JavaScript

Javascript 날짜 계산기

요술공주밍키 2023. 1. 31. 13:38

왜?

날짜 선택

위와 같이 오늘 날짜를 기준으로 특정 날짜를 가져오고 싶었는데 여러 페이지에서 매번 new Date() 하는 것도 번거롭고

const now = new Date();
const tomorrow = now.getDate() + 1;

이런 식으로 간단하게 적용해 버리면 31일에는 오류가 날 수밖에 없다.

 

그래서 날짜를 구해야하는 모든 페이지에서 간단하게 적용하기 위해 계산기를 만들었다.

 

 날짜 계산기 Script

function getDate(addYear, addMonth, addDay, token) {
	token = token == undefined || token == null ? "-" : token;
	addYear = addYear == null ? 0 : addYear;
	addMonth = addMonth == null ? 0 : addMonth;
	addDay = addDay == null ? 0 : addDay;
	
	let now = new Date();
	let ry = now.getFullYear();
	let rm = now.getMonth() + 1;
	let rd = now.getDate();
	
	if(addYear != 0) {
		ry = ry + addYear;
	}
	
	if(addMonth != 0) {
		let isRun = true;
		rm = rm + addMonth;
		while(isRun == true) {
			if(rm > 12) {
				ry ++;
				rm = rm - 12;
			} else if(rm < 1) {
				ry--;
				rm = 12 + rm;
			}
			if(rm > 0 && rm < 13) {
				isRun = false;
			}
		}
	}
	
	let cal = new Date(ry, rm, 0);
	
	if(rd > cal.getDate()) {
		rd = cal.getDate();
	}
	
	if(addDay != 0) {
		rd = rd + addDay;
		
		if(rd > cal.getDate() || rd < 1) {
			let isRun = true;
			while(isRun == true) {
				if(rd > cal.getDate()) {
					rd = rd - cal.getDate();
					rm++;
					
					if(rm > 12) {
						ry++;
						rm = 1;
					}
				}
				
				if(rd < 1) {
					rm--;
					if(rm < 1) {
						ry--;
						rm = 12;
					}
					
					cal = new Date(ry, rm, 0);
					rd = cal.getDate() + rd;
				}
				cal = new Date(ry, rm, 0);
				
				if(rd <= cal.getDate() && rd >= 1) {
					isRun = false;
				}
			}
		}
		
		if(rd > cal.getDate() || rd < 1) {
			cal = new Date(ry, rm, 0);
		}
	}
	
	if(rm.toString().length < 2) {
		rm = '0' + rm;
	}
	if(rd.toString().length < 2) {
		rd = '0' + rd;
	}
	
	return ry + token + rm + token + rd;
}

인자를 넘기지 않으면 오늘 날짜가 출력되고 예) 2023-01-31

인자를 넣게 되면 해당 내용을 +, - 해서 출력해 준다. 예) getDate(0, 0, 1) => 2023-02-01,  getDate(0, 0, -1) => 2023-01-30