자바스크립트 현재 날짜 세팅하는 함수 및 jsp 여러건 변수를 이용해 radio 출력하는 방법
프로그래밍 하다보면 라디오던 체크박스던 여러건 해야할 일이 있다.
이럴때 예전에는 0,1,2,3 ... 이런식으로 하드코딩해서 했는데 영 무식하고 수정등이 어렵다..
그래서 변수를 이용하면 될려나... 생각하다가 해보니까 되었다.
역시 코딩은 머리보다 손가락인것 같다. 긴가민가할때 그냥 쳐보고 확인해 보면 된다..
<%
for(int i=0; i<5; i++){
%>
<input type="text" id="endYmd<%=i%>" name="endYmd<%=i%>">
<input type="radio" name="rdoDate<%=i%>" value="0" onclick="javascript:clickDate(<%=i%>,0)" />
<label>당일</label>
<input type="radio" name="rdoDate<%=i%>" value="1" onclick="javascript:clickDate(<%=i%>,1)" />
<label>1일</label>
<input type="radio" name="rdoDate<%=i%>" value="5" onclick="javascript:clickDate(<%=i%>,5)" />
<label>5일</label>
<input type="radio" name="rdoDate<%=i%>" value="30" onclick="javascript:clickDate(<%=i%>,30)" />
<label>30일</label>
<input type="radio" name="rdoDate<%=i%>" value="90" onclick="javascript:clickDate(<%=i%>,90)" />
<label>90일</label>
<%
}
%>
function clickDate(i,v){
var date=new Date();
if(v==0){}
else if(v=="1"){ myDate.setDate(myDate.getDate() + 1); }
else if(v=="5"){ myDate.setDate(myDate.getDate() + 5); }
else if(v=="30"){ myDate.setDate(myDate.getMonth() + 1);}
else if(v=="90"){ myDate.setDate(myDate.getMonth() + 3);}
//잘못된 코드 아래에 설명이 있음.
var year=date.getFullYear();
var month=date.getMonth()+1; //0부터 시작하므로 1더함
var day=date.getDate();
if((""+month).length==1){month="0"+month;}
if((""+day).length==1){day="0"+day;}
var d2=year+"-"+month+"-"+day;
$("#endYmd"+i).val(d2);
}
=====================================================
저렇게 쓰면 맞는지 알았는데 중대한 오류가 있었다. 눈치 챘나요? 바로 날짜 계산시 값을 가져오기 전에 계산을 먼저 다 해야 한다는 것이다.
else if(v=="1"){ myDate.setDate(myDate.getDate() + 1); }
else if(v=="5"){ myDate.setDate(myDate.getDate() + 5); }
//월은 0 부터 시작하기 때문에 더하고 싶은 월+1을 해줘야 한다.
else if(v=="30"){ myDate.setDate(myDate.getMonth() + 2);}
else if(v=="90"){ myDate.setDate(myDate.getMonth() + 4);}
//년도를 가져오기 전에 이미 다 계산을 해야 한다.
var year=date.getFullYear();
// 여기가 잘못됐음.
//var month=date.getMonth()+1; //0부터 시작하므로 1더함
//계산은 년도 가져오기 전에 이미 다해야 한다. 년도가 바뀔때 문제가 됨.
var month=date.getMonth();
var day=date.getDate();
======================================================
바로 위에게 맞는줄 알았는데 바로 위에처럼 하면 월초에 달이 현재달이 아닌 현상이 발생했다.
그래서 결론은..
var date=new Date();
if(v==0){}
else if(v=="1"){ date.setDate(date.getDate() + 1); }
else if(v=="5"){ date.setDate(date.getDate() + 5); }
else if(v=="30"){ date.setDate(date.getMonth() + 1);}
else if(v=="90"){ date.setDate(date.getMonth() + 3);}
//잘못된 코드 아래에 설명이 있음.
var year=date.getFullYear();
var month=date.getMonth()+1; //0부터 시작하므로 1더함
var day=date.getDate();
if((""+month).length==1){month="0"+month;}
if((""+day).length==1){day="0"+day;}
var d2=year+"-"+month+"-"+day;
$("#endYmd"+i).val(d2);