본문 바로가기
개발~/HTML,JavaScript

[javaScript] 한달 전..?이란..?

by 보배곰 2017. 6. 28.

자바스크립트에서 한달 전, 일주일 전.. 과 같은 내용이 필요할 때 사실 별 생각없이 getMonth() -1 했었는데 생각해보니 조금 이상하다. 


에를 들어, 2017년 3월 31일 때, getMonth() -1 하면, 2월의 마지막 날이 나올 것 같은데, 3월 3일이 나온다. 


5월 31일에 getMonth() -1 은 5월 1일로 나온다.



왜 2월이 아니라 3월이 나올까? 왜 4월이 아니라 5월이 나올까? 


내생각에는 로직이 이렇게 돌아가는 것 같다. 

3월 31일에서 getMonth() -1을 하게 되면 2월 31일이 된다. 하지만 2017년 2월은 28일까지 있으므로, 3일이 뒤로 밀리게 되고, 그게 3월 3일로 나오는 것 같다. 


마찬가지로, 5월은 31일까지 있고, 2017년 4월은 30일까지 있다. 5월 31일에서 getMonth() -1 하면 4월 31일이 되고, 4월 31일은 없으니까, 4월의 마지막 날인 30일에서 하루만큼 뒤로 밀려서 5월 1일로 나오는 것 같다. 


날짜가 이번달, 저번달에 다 있으면 상관이 없다. 에를들어, 5월 10일 , 4월 10일 이런건 getMonth() -1을 해도 상관이 없지만, 

저번달에는 없는 날짜지만, 이번달에는 있는 날짜가 문제인 것이다. 

나는 오늘부터 한달 전이 필요한 것이기 때문에, 오늘의 날짜가 저번달에 마지막 날보다 크면 체크를 해줘야 하는 것이다. 


그리고 여기서 한 번 더 생각할 게, 

3월 5일의 한달 전은 일반적으로 2월 5일이라고 생각한다. 

그런데, 

3월 31일의 한달 전은 2월 28일일까? 3월 1일일까? 


솔직히 잘 모르곘다. 애매하다. 

그래서 그냥 2월 28일로 정했다. 이번달의 마지막 날의 한달 전은 저번달의 마지막 날인걸로. 

나중에 바꿔야할지도 모르겠지만ㅋㅋㅋ 

사람들이 일반적으로 생각하는게 어떤걸까? 



그럼 여기서 필요한건, 오늘의 날짜와 지난달의 마지막날(last day of last Month)이다. 

지난달의 마지막날은 아래처럼 구하면 된다. 

var lastDayofLastMonth = ( new Date( d.getYear(), d.getMonth(), 0) ).getDate();


그리고 그냥 오늘날짜랑 지난달의 마지막날과 비교해서, 오늘날짜가 지난달의 마지막날짜보다 크다면 날을 그 달의 마지막날로 세팅해주면 되는것이다. 

var d = new Date();
var lastDayofLastMonth = ( new Date( d.getYear(), d.getMonth(), 0) ).getDate();
if(d.getDate() > lastDayofLastMonth) {
    d.setDate(lastDayofLastMonth);
}
var month = d.getMonth() -1;
d.setMonth(month);
$( "#start_period" ).datepicker("setDate", d );



하면, 3월 31일의 한달 전은 2월 28일로 나온다. 





'개발~ > HTML,JavaScript' 카테고리의 다른 글

자료형 변환  (0) 2017.06.04

댓글