평범한 연구소

[Javascript] 날짜 계산 (오늘 날짜, 1개월 후, 1년 후, 이번주 화요일, 다음주 화요일) 본문

Pront/Javascript

[Javascript] 날짜 계산 (오늘 날짜, 1개월 후, 1년 후, 이번주 화요일, 다음주 화요일)

soyeonisgood 2022. 12. 25. 20:19

특정 요일(화요일)마다 메일을 발송하는 기능을 구현 중이다.

오늘을 기준으로 돌아오는 화요일을 구해야한다. 

Day(일)는 0이 일요일이다. (0:일 ~ 6:토) 

 

 

 

오늘 날짜 구하기

new Date()를 이용하여 오늘 날짜를 구한다.

 

1개월 후 구하기

getMonth(): today의 월을 가져온다.

setMonth(): 가져온 월에 1을 더한다.

toISOString(): 날짜 형식을 YYYY-MM-DDTHH:mm:ss.sss 으로 변환한다. 년월일만 가져와 substring으로 분리하기 위해서!

12개월 후 구하기

1개월 후를 구한 것과 마찬가지로 12을 Month로 더해준다.

돌아오는 화요일 구하기

오늘이 일요일:0 이라면, 화요일은 2

오늘이 일요일이 아닌 다른 요일이라면 일주일(7)+화요일(2) 를 해주면 된다!

// 구독 기간 날짜 계산
function selectSubDate(selectSub) {
	let today = new Date();
	let endDate; 
	
	// 구독 시작일을 오늘 날짜로 
	startDate = new Date(today).toISOString().substring(0, 10);
	$("input[name=dateSubStart]").attr("value", startDate); 
	
	if(selectSub === 'monthSub') { 
		// 1개월 후 날짜 
		endDate = new Date(today.setMonth(today.getMonth() + 1)).toISOString().substring(0, 10);
		$("input[name=dateSubEnd]").attr("value", endDate);
		$("input[name=price]").attr("value", 3000);
		$("input[name=totalPrice]").attr("value", 3000);
	} else if(selectSub === 'yearSub') {
		// 12개월 후 날짜
		endDate = new Date(today.setMonth(today.getMonth() + 12)).toISOString().substring(0, 10);
		$("input[name=dateSubEnd]").attr("value", endDate);
		$("input[name=price]").attr("value", 24000);
		$("input[name=totalPrice]").attr("value", 24000);
	}
	
	// 첫 메일 발송일
	let thisDate = new Date();
	let dayToday = thisDate.getDay(); 
	let firstMailDate; 
	
	if(dayToday === 2) { // 오늘이 화요일이면
		let calcDate = thisDate.getDate() + 7; 
		firstMailDate = new Date(thisDate.setDate(calcDate)).toISOString().substring(0, 10);
	} else {
		let calcDate = thisDate.getDate() - dayToday + ((dayToday == 0 ? 2 : 9) + 0); 
		firstMailDate = new Date(thisDate.setDate(calcDate)).toISOString().substring(0, 10);
	}
	
	$("input[name=dateFirstMail]").attr("value", firstMailDate);
}