자바크립트 초고수님에께 날짜관련 함수 질문 드립니다. 정보
자바크립트 초고수님에께 날짜관련 함수 질문 드립니다.
본문
0000-00-00 의 형식의 두개의 날짜를
아래와 같은 함수로 차이를 구합니다.
같은달 끼리는 자알~ 출력 됩니다.
그러나 다른달을 걸치면 하루가 빠지는데 왜 그런가요??
오차가 생기는 예를 들어 보겠습니다.
2011-08-30 ~ 2011-08-31 의 차이날은 1일 입니다. 잘 구해줍니다!!
그런데,,,
2011-08-30 ~ 2011-09-01 도 차이날은 똑같이 1일 입니다. ㅠㅠ
이문제인지 모르고 엉뚱한곳에서 헤매기를 어언 일주일 됬습니다.
겨우 이 함수가 잘못 됬음을 알아 냈지만 정말 잘못 된 함수 인가요?
교정할려면 어떻게 해야 할까요???
<SCRIPT LANGUAGE="JavaScript">
<!--
function ProjectInterval(){
date1 = document.getElementById('PStart').value;
date2 = document.getElementById('PEnd').value;
var sd = date1.split("-");
var ed = date2.split("-");
var sdate = new Date(sd[0], sd[1], sd[2]);
var edate = new Date(ed[0], ed[1], ed[2]);
aa.innerHTML = (edate - sdate)/86400000 ;
}
//-->
</SCRIPT>
<input type="text" id="PStart" itemname="프로젝트 시작" onKeyup="ProjectInterval()">
<input type="text" id="PEnd" itemname="프로젝트 종료" onKeyup="ProjectInterval()">
<BR>
프로젝트 기간은 <span id="aa" style="" ></span> 일
아래와 같은 함수로 차이를 구합니다.
같은달 끼리는 자알~ 출력 됩니다.
그러나 다른달을 걸치면 하루가 빠지는데 왜 그런가요??
오차가 생기는 예를 들어 보겠습니다.
2011-08-30 ~ 2011-08-31 의 차이날은 1일 입니다. 잘 구해줍니다!!
그런데,,,
2011-08-30 ~ 2011-09-01 도 차이날은 똑같이 1일 입니다. ㅠㅠ
이문제인지 모르고 엉뚱한곳에서 헤매기를 어언 일주일 됬습니다.
겨우 이 함수가 잘못 됬음을 알아 냈지만 정말 잘못 된 함수 인가요?
교정할려면 어떻게 해야 할까요???
<SCRIPT LANGUAGE="JavaScript">
<!--
function ProjectInterval(){
date1 = document.getElementById('PStart').value;
date2 = document.getElementById('PEnd').value;
var sd = date1.split("-");
var ed = date2.split("-");
var sdate = new Date(sd[0], sd[1], sd[2]);
var edate = new Date(ed[0], ed[1], ed[2]);
aa.innerHTML = (edate - sdate)/86400000 ;
}
//-->
</SCRIPT>
<input type="text" id="PStart" itemname="프로젝트 시작" onKeyup="ProjectInterval()">
<input type="text" id="PEnd" itemname="프로젝트 종료" onKeyup="ProjectInterval()">
<BR>
프로젝트 기간은 <span id="aa" style="" ></span> 일
댓글 전체

굳이 배열을 만들 필요가 없어 보이는데요?
아래는 제가 그냥 외우고 있는 일종의 공식...
<script>
document.write(Math.abs((new Date('2011/8/30')-new Date('2011/9/1'))/86400000));
</script>
위에서 절대값을 붙인 것은 값을 거꾸로 기입하면 마이너스가 나오기 때문이구요.
input 와 버튼을 만든다면 아래처럼 응용하면 되겠네요.
<script>
function mytime(myid){
time1=new Date(t11.value+'/'+t12.value+'/'+t13.value);
time2=new Date(t21.value+'/'+t22.value+'/'+t23.value);
myid.innerText=Math.abs((time1-time2)/86400000);
}
</script>
<DIV><input name=t11 value=2011>-<input name=t12 value=08>-<input name=t13 value=30></DIV>
<DIV><input name=t21 value=2011>-<input name=t22 value=08>-<input name=t23 value=31></DIV>
<BUTTON style=cursor:pointer onclick=mytime(textime)>CLICK</BUTTON>
<SPAN id=textime><SPAN>
아래는 제가 그냥 외우고 있는 일종의 공식...
<script>
document.write(Math.abs((new Date('2011/8/30')-new Date('2011/9/1'))/86400000));
</script>
위에서 절대값을 붙인 것은 값을 거꾸로 기입하면 마이너스가 나오기 때문이구요.
input 와 버튼을 만든다면 아래처럼 응용하면 되겠네요.
<script>
function mytime(myid){
time1=new Date(t11.value+'/'+t12.value+'/'+t13.value);
time2=new Date(t21.value+'/'+t22.value+'/'+t23.value);
myid.innerText=Math.abs((time1-time2)/86400000);
}
</script>
<DIV><input name=t11 value=2011>-<input name=t12 value=08>-<input name=t13 value=30></DIV>
<DIV><input name=t21 value=2011>-<input name=t22 value=08>-<input name=t23 value=31></DIV>
<BUTTON style=cursor:pointer onclick=mytime(textime)>CLICK</BUTTON>
<SPAN id=textime><SPAN>

고수의 향이 느껴 집니다.
잘 뜯어보고 응용하겠습니다.
아직도 마이너스가 나오는 것을 이해를 못하지만 감사할 따름 입니다.
잘 뜯어보고 응용하겠습니다.
아직도 마이너스가 나오는 것을 이해를 못하지만 감사할 따름 입니다.

input 를 하나만 쓰려면...
<script>
function mytime(myid){
myid.innerText=Math.abs((new Date(t1.value)-new Date(t2.value))/86400000);
}
</script>
<DIV><input name=t1 value=2011/08/30></DIV>
<DIV><input name=t2 value=2011/9/1></DIV>
<BUTTON style=cursor:pointer onclick=mytime(textime)>CLICK</BUTTON>
<SPAN id=textime><SPAN>
또는 - 를 붙인다면...
<script>
function mytime(myid){
myid.innerText=Math.abs((new Date(t1.value.replace('-','/'))-new Date(t2.value.replace('-','/')))/86400000);
}
</script>
<DIV><input name=t1 value=2011-08-30></DIV>
<DIV><input name=t2 value=2011-9-1></DIV>
<BUTTON style=cursor:pointer onclick=mytime(textime)>CLICK</BUTTON>
<SPAN id=textime><SPAN>
<script>
function mytime(myid){
myid.innerText=Math.abs((new Date(t1.value)-new Date(t2.value))/86400000);
}
</script>
<DIV><input name=t1 value=2011/08/30></DIV>
<DIV><input name=t2 value=2011/9/1></DIV>
<BUTTON style=cursor:pointer onclick=mytime(textime)>CLICK</BUTTON>
<SPAN id=textime><SPAN>
또는 - 를 붙인다면...
<script>
function mytime(myid){
myid.innerText=Math.abs((new Date(t1.value.replace('-','/'))-new Date(t2.value.replace('-','/')))/86400000);
}
</script>
<DIV><input name=t1 value=2011-08-30></DIV>
<DIV><input name=t2 value=2011-9-1></DIV>
<BUTTON style=cursor:pointer onclick=mytime(textime)>CLICK</BUTTON>
<SPAN id=textime><SPAN>

안그래도 이미 입력받는 날짜가 0000-00-00 형식 으로 되 있어서 다시 배열로 조합 했습니다만.
치환 하여 사용 할 수 도 있군요...
짐작컨데
/ <- 이것은 자바스크립트 내장함수에 쓰이는 문자 인가 봐요?
시작날짜보다 종료날짜가 작더라도 전부 양수로 나오던데 맞나요?
해서 체크를 하지 못함이 단점이긴 하군요..
함수를 하나 더 만들어야 겠네요??
감사 드립니다
치환 하여 사용 할 수 도 있군요...
짐작컨데
/ <- 이것은 자바스크립트 내장함수에 쓰이는 문자 인가 봐요?
시작날짜보다 종료날짜가 작더라도 전부 양수로 나오던데 맞나요?
해서 체크를 하지 못함이 단점이긴 하군요..
함수를 하나 더 만들어야 겠네요??
감사 드립니다

<script>
document.write(Math.abs((new Date('2011/8/20')-new Date('2011/8/31'))/86400000));
</script>
절대값을 벗기면 됩니다. 빼는 순서도 조정하고...
<script>
document.write((new Date('2011/8/20')-new Date('2011/8/31'))/86400000);
</script>
document.write(Math.abs((new Date('2011/8/20')-new Date('2011/8/31'))/86400000));
</script>
절대값을 벗기면 됩니다. 빼는 순서도 조정하고...
<script>
document.write((new Date('2011/8/20')-new Date('2011/8/31'))/86400000);
</script>

replace() 메서드가 문자를 치환하는 메서드죠.
이 메서드에 대한 개인적인 얘기를 하자면...
지금은 액션 3.0 시대이지만...
플래시 액션 2.0 에는 이 메서드가 없습니다. 그래서 플래시 액션으로 코딩을 하다가 문자열을 치환해야 할 경우가 생기면 아래와 같은 좀 치졸한 방법을 쓰곤 했었죠.ㅋ
<script>
document.write(('2000-00-00').split('-').join('/'));
</script>
이 메서드에 대한 개인적인 얘기를 하자면...
지금은 액션 3.0 시대이지만...
플래시 액션 2.0 에는 이 메서드가 없습니다. 그래서 플래시 액션으로 코딩을 하다가 문자열을 치환해야 할 경우가 생기면 아래와 같은 좀 치졸한 방법을 쓰곤 했었죠.ㅋ
<script>
document.write(('2000-00-00').split('-').join('/'));
</script>

절대값을 빼고 빼는 순서를 바꿔 보니까 체크 가능 하긴 하더라구요
그런데 왜 굳이 절대값으로 하셨는지가 궁굼 합니다만,,,
치환 함수 알게 된것도 큰 소득 입니다.
그런데 왜 굳이 절대값으로 하셨는지가 궁굼 합니다만,,,
치환 함수 알게 된것도 큰 소득 입니다.