테스트 사이트 - 개발 중인 베타 버전입니다

경매 남은 시간 구하기 PHP와 자바스크립트 소스

경매 남은 시간 구하기 PHP와 자바스크립트 소스
글쓴이 : 오렌지블루
저작권자 이메일 : yjw1250@kebi.com
작성일 : 2002/04/25 17:33:27
글내용
<필독>경매 남은시간 계산 소스입니다. $StartTime=$Auction[Start_time]; //시작시간을 받아옵니다(종료시간 받아와도 좋습니다.)

switch ( $State ) (경매의 진행상태를 보여주는 값을 받아와서 값대로 뿌려줍니다.그려)
{
case 2: $StateName = '낙찰';
break;
case 3: $StateName = '유찰';
break;
case 1: $StateName = '경매진행중';
}

$StartT = explode(' ',$StartTime); /*1
$StartT2 = explode('-',$StartT[0]); /*2
$StartT1 = explode(':',$StartT[1]); /*3
//이 소스를 이따우로 만든 이유는...
DB에 날짜(시작날짜 오알 종료날짜를 사용자가 지맘대로 넣어서(형식에 맞게 ^^;) -> 0000-00-00 00:00(요따우 형식으로 디폴트를 잡고 형식은 datetime으로 잡아좋슴.)
/*1 => ex) 2001-05-10 11:10 을 공백을 구분자로 두어서 나누어서..StartT라는 변수에 집어 넣심다.
/*2 => ex) 2001-05-10이라는 변수가 Start[0]에 들어왔는데 역시 '-'을 구분자로 두고 Start2에 집어 넣심다.
/*3 => ex) 11:10이라는 변수가 Start[1]에 들어왔는데 또 역시 ':'을 구분자로 두고 Start1에 집어 넣심다.




$TimeRemain = mktime((int)$StartT1[0],((int)$StartT1[1]),((int)$StartT1[2]),(int)$StartT2[1],(int)$StartT2[2],(int)$StartT2[0]);
//여태껏 짤라서 나눠 놓은 날짜변수를 int형으로 각각 바까주고
(왜 이래 하느냐 하면은? 잘 생각해보세요..(아까 사용자가 지맘대로 날짜를 집어넣는다고 했심다.. 그럼..이건 무엇을 뜻하는걸까요?
맞심다..형식은 datatime이라고 받아놨지만..요놈의 php가 문자로 인식합니다 그려..그래서 변환했심다.)
계속이어서.. int형으로 바뀐 날짜변수를 타임스탬프(mktime)의 형식으로 바까줍니다 (9580924 <- 요렇게)

$TimeR = getdate($TimeRemain);
// 위에서 받은 타임스탬프값(TimeRemain)을 getdate라는 함수를 써서 날짜형식으로 재 변환시켜줍니다.

echo" <td width=250 style=color:red; id=showDateId state='$StateName'></td>"
// 요놈은 밑에 스크립터에서 선언한 함수를 불러와서 화면에 뿌려주기 위함입니다. 또한 위에서 선언한 '경매진행상태'를 나타내기도 하구요


/***진짜 중요한 소스***/
<script>
var startDate = new Date($TimeR[year], $TimeR[mon]-1, $TimeR[mday], $TimeR[hours], $TimeR[minutes], $TimeR[seconds] );
//위에서 getdate형식으로 변환한 변수들을 자바스크립터의 Date형식으로 바까줍니다.
var todayDate = new Date();
// 현재 날짜를 받아옵니다.
var noDayDate = new Date(0,1,0,0,0,0);
// 여기는 웃기게도 자바나 php에서는 1970까지의 날짜만 표시한다는 것입니다..그래서 이걸 써 줬심다.
var flag=0;
// 요건 체크하는 변수임다.
var returnValue = '';
// 반환하는 값을 공백으로 바까줍니다.
var hour = '', day, min, sec;
// 요건 밑에서 뿌려줄 변수를 선언하는 겁니다.

todayDate.setTime ( startDate.getTime() - todayDate.getTime() + noDayDate.getTime() );
// 지금뿌려줄 날짜형식을 요놈으로 재정의 하는겁니다.(시작날짜 - 오늘날짜 + 1970년날짜)
/*
그냥 계산 원리...(원래 요런 형식으로 나눕니다.)
s =startDate.getTime() - todayDate.getTime();

if ( s < 0 ) s = -s;

s = s/1000;
var hour = parseInt(s/60/60);
s -= hour*60*60;
var min = parseInt( s/60 );
s -= min*60;
var sec = parseInt( s );
*/

function ShowDate()
{
if ( todayDate.getTime() <= noDayDate.getTime() )
flag = 1;

// 뿌려줄 현재날짜랑 1970년 날짜랑 비교해서 뿌려줄 현재날짜가 1970년 날자랑 같거나 크면
flag라는 변수에 1을 집어넣심다.

if ( !flag )
{
sec = parseInt(todayDate.getTime()-noDayDate.getTime())/1000;
day = parseInt(sec/60/60/24);
sec = (sec-(day*60*60*24));
//이게 진짜 핵심인데요....정말이지 머리싸매고 했심다.
오늘뿌려줄 날짜에서 1970년날짜를 빼고 그 값을 1000으로 나눕니다.
그리고 int형으로 parse시켜줍니다.
다음..day(일자를 뿌려줍니다)라는 함수에 parse받은 sec변수를 /60/60/24(분,초,시간)으로 나누어서 역시 parse시킵니다.
그리고..가장 중요한 다음... sec에서 parse받은 day를 '*60*60*24'로 곱해서 초기화 시켜줍니다.
요게 바로 남은 날짜중 '~일'을 뿌려주는 겁니다..
다른것도 똑 같은 원리로 뿌려주는 겁니다.

hour = parseInt(sec/60/60);
sec = (sec-(hour*60*60));

min = parseInt(sec/60);
sec = parseInt(sec-(min*60));


if ( day )
document.all.showDateId.innerText = day+'일 ';
else
document.all.showDateId.innerText = '';

todayDate.setSeconds( todayDate.getSeconds()-1);

if ( hour )
document.all.showDateId.innerText += hour+'시 ';
if ( min )
document.all.showDateId.innerText += min+'분 ';
if ( sec )
document.all.showDateId.innerText += sec+'초 ';

//요부분은 조금의 테크닉을 준건데요(?) 무조건 날짜를 뿌리는게 아니라 값중에 0이라는 것이 있으면 그 부분은 빼고
보여주는 겁니다.(ex : 10일 5초남았음 이라고)

setTimeout('ShowDate()', 1000);
}
else
{
document.all.showDateId.innerText = document.all.showDateId.state;
}
}
ShowDate();
</script>

//이상 저와 아시는 분의 도움을 받은 경매용 남은 시간 계산 소스였심다.
많이 허접한데여..
혹시 더 좋은 방식이 있다면 고쳐주세요..
글재주가 없어 설명도 허접으로 씁니다..그려..^_^

-------------------------------------------------------------------------
이런 소스가 아무리 찾아봐도 없더라구요..그래서 올립니다.
저도 이런 소스 찾다가 해매다가 다행히 php와 스크립터 도사님에게
전수받아가지고(?) 작성했심다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 2개

게시글 목록

번호 제목
15265
26093
15262
3437
15257
3429
15256
15252
15251
15250
15246
15242
3425
3418
15236
3411
15233
15229
15228
15226
3399
15224
15217
15195
15193
3373
3360
15188
29852
15181
15159
3350
15158
15157
15152
15150
3334
15144
15140
3331
15136
29848
15129
15107
3320
15106
15095
29847
15094
3314
15091
15089
29834
15088
3303
15085
15084
26091
15083
15073
15071
3290
24301
15067
3285
3270
15064
29829
15062
15053
3261
3252
3249
15050
3243
15046
24291
24278
3231
15042
24275
3225
26075
15041
3222
3218
15025
15024
15018
29821
15015
15013
15012
3210
3200
3198
24274
15005
3188
15001