차차로그
자바스크립트 addDate() 만들기 본문
//gfndayAdd(간격, 숫자, 날짜)
var gfndayAdd = function(interval, num, day) {
let year;
let month;
let date;
let type = typeof(day);
//대소문자 구분없이 받기 위해 toLowerCase() 실행
interval = interval.toLowerCase();
if(type == 'string'){
year = Number(day.substr(0, 4));
month = Number(day.substr(5, 2) - 1);
date = Number(day.substr(9, 2));
day = new Date(year, month, date);
}else if(type == 'object'){
year = day.getFullYear();
month = day.getMonth();
date = day.getDate();
}
//날짜 계산하기
if(interval == 'y'){
day.setFullYear(year + num);
}else if(interval == 'm'){
day.setMonth(month + num);
}else if(interval == 'd'){
day.setDate(date + num);
}
//string 타입은 다시 string으로 형변환
if(type == 'string'){
year = day.getFullYear();
//1월~9월/1일~9일까지 앞에 0을 붙임
month = day.getMonth() + 1 < 10 ? "0" + (day.getMonth() + 1) : day.getMonth() + 1;
date = day.getDate() < 10 ? "0" + day.getDate() : day.getDate();
return (year + '-' + month + '-' + date);
}else{
return day;
}
}
let today = new Date(); //Wed Aug 03 2022 08:42:12 GMT+0900 (한국 표준시)
console.log(gfndayAdd('m', 5, today));
today = '2022-08-01';
console.log(gfndayAdd('d', 5, today));
interval : 날짜계산할 때 연/월/일 기준을 받는 매개변수. 'y' -> 연도, 'm' -> 월, 'd' -> 일
num : 날짜를 계산할 숫자를 받는 매개변수 양수, 음수 모두 가능
day : 기준 날짜를 받는 매개변수
ex ) gfndayAdd('m', 5, '2022-08-05') : 2022년 8월 5일 기준으로 5개월 후를 계산
gfndayAdd('d', -5, '2022-08-05') : 2022년 8월 5일 기준으로 5일 전을 계산
조건 : object 타입으로 넘긴 값은 리턴도 object타입으로 받고, string 타입으로 넘긴 값은 string 타입으로 받을 것
1. 날짜가 object타입인지 string 타입인지 확인한다.
string 타입이면 str을 사용해 년, 월, 일을 잘라내 number타입으로 변환한 후에 각각 변수에 저장한다. 그리고 Date() 객체에 저장해 object 타입으로 변환해준다.
object 타입이면 get 메소드를 이용해 년, 월, 일을 받아 변수에 저장한다.
2. 날짜 계산은 공통로직으로 구현했다. interval이 y, m, d인 경우를 if로 구분해 변수에 num을 더해줬다.
3. string 타입은 현재 object타입이기 때문에 다시 string 타입으로 형변환한다. 월과 일은 10보다 작을 경우 앞에 0을 붙일 수 있게 삼항연산자를 이용했다.
주의할 점 : 자바스크립트 date객체의 월은 0부터 시작하게 된다. 때문에 getMonth로 월을 가져오면 1씩 값이 부족하고 setMonth로 7을 입력하면 실제로는 8월로 인식되는 등 주의가 필요하다!
function gfnDateAdd(argInterval, argNum, argDate) {
const paddingZero = (num) => num > 9 ? num : '0'+num;
//변수에 담긴 날짜가 문자타입인 경우 날짜타입으로 변경
//이때 문자열 형식은 yyyy-mm-dd여야 제대로 변환이 된다.
let calDate = typeof argDate == 'object' ? argDate : new Date(argDate);
//날짜형식이 아닌 값이 넘어 왔을경우 오류
if (isNaN(calDate)){
alert("invalid date format");
return false;
}
//argDate가 Date()로 일치되었기 때문에 같은 코드로 날짜세팅이 가능하다.
switch(argInterval){
case 'y':
calDate.setFullYear(calDate.getFullYear() + argNum);
break;
case 'm':
calDate.setMonth(calDate.getMonth() + argNum);
break;
case 'd':
calDate.setDate(calDate.getDate() + argNum);
break;
}
//Date타입은 바로 리턴을 하고 원래 string타입이었던 매개변수는 다시 string으로 변환한다.
if(typeof argDate == 'object'){
return calDate;
}else {
let yy = calDate.getFullYear();
//const paddingZero = (num) => num > 9 ? num : '0'+num; 함수를 이용해 앞에 0을 붙여줌
let mm = paddingZero(calDate.getMonth() + 1);
let dd = paddingZero(calDate.getDate());
//join()은 배열의 요소를 구분자로 연결해 하나의 값으로 만들어준다.
//괄호 안에 구분자를 넣지 않으면 디폴트로 쉼표(,)가 들어간다.
return [yy, mm, dd].join('-');
}
}
'JavaScript' 카테고리의 다른 글
JS 배열 합치기 (0) | 2022.08.08 |
---|---|
JS 배열 값 추가, 삭제하기 (0) | 2022.08.08 |
JS null, undefined + isNaN() (0) | 2022.08.01 |
JS 실행순서 (0) | 2022.07.29 |
JS변수 var / let / const (0) | 2022.07.25 |