웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
PHP 혼자 공부하기 - 8 :: 시간다루기
2003.04.13 05:10
우왓! 조만간 10강이 눈앞이군요. +_+
지금 7강까지 윈도우즈 도움말 형식으로 만들어 두었는데, 기초편이 7강까지라 우선 링크해볼까....하는 생각도 가지고 있습니다만, 윈도우즈 도움말도 만들기가 워낙에 어려운데다가 처음 만들어보는 거라 허접하기때문에.. 욕먹을 것 같아서 관둬버렸습니다. -_-;; 원하시는 분이 있다면 우선 개인적으로 드릴수도... 쿨럭~
사실, 시간에 관련된 개념이나 함수는 그다지 많지 않습니다. 다만, 몇가지 안되는 이것들을 잘 조합하는 법을 잘 모르시는 분이 많아서 질문답변란에서 심심치 않게 볼 수 있는 질문이 되어버렸습니다. ^^;; 그래서 오늘은 시간을 다루는 법에 대해서 강의를 하도록 하겠습니다. 에헴~
우선은 UNIXTIME(정확히는 UNIX Timestamp입니다) 이라는 시간체계를 알아둘 필요가 있습니다. UNIXTIME은 정수형 숫자인데, 1970년 1월 1일 0시 0분 0초 GMT 시간이후 지난 시간을 초로 환산한 것입니다. 머... 기준은 알아둘 필요가 없고, 다만 "초 단위"라는 것만 기억하시면 되겠습니다. 즉 UNIXTIME 으로 현재시간에서 1시간 뒤를 구하려면 UNIXTIME(현재시간) + 3600 을 하면 된다는 것이죠. UNIXTIME 에 대한 이해가 되시는지요?
PHP에서 현재의 UNIXTIME 값을 구하는 함수가 있는데 바로 time() 입니다. 간단하게 다음 소스를 실행해서 확인해볼 수 있습니다.
제가 말했던 대로 숫자로 나타나죠? ^^ 그렇다고 이걸 가지고 다른 사람들한테 이게 현재시간이니까 알아서들 해석해라...라고 할 수는 없으니 이것을 사람이 읽기 편한 형태로 바꿔주는 함수가 있는데 그것이 바로 date() 함수입니다. date 함수의 정의는 다음과 같습니다.
string date ( string format [, int timestamp])
즉 반환되는 값은 string - 문자열형이며 format 으로 이 형태를 지정해주게 됩니다. 뒤쪽에 보면 대괄호로 둘러싸인 부분이 있는데 이 부분은 생략도 가능하다는 뜻입니다. 즉, date( "Y-m-d" ) 와 같은 사용도 가능하며 date( "Y-m-d", 1000000 ) 과 같은 형태도 사용가능하다는 의미입니다. 뒷부분을 생략하면 date의 기준은 현재 시각이 됩니다.
date( "Y-m-d" )과 date( "Y-m-d", time() ) 는 같은 의미라는 거죠. 저 Y-m-d가 무엇을 의미하는지 궁금하시죠? 이제부터 알려드립니다. ^^ format 은 말 그대로 date에서 어떤 식으로 날짜를 변환하는가에 대한 형식인데, format 의 파라미터 문자들은 다음과 같습니다.
a : am 과 pm 중 현재 시간에 맞는 것을 출력한다.
A : AM 과 PM 중 현재 시간에 맞는 것을 출력한다.
d : 일(day), 앞에 0이 붙은 2자리 숫자, 01부터 31까지
D : 요일 이름, 3글자의 영문자. Sun, Mon 등
F : 월 이름, 문자열. January, Febrary 등
g : 시, 0이 붙지 않는 12시간 형식, 1부터 12까지(a, A 등과 사용하지 않으면 시간 혼동의 우려 있음)
G : 시, 0이 붙지 않는 24시간 형식.
h : 시, 12시간 형식. 01부터 12까지
H : 시, 24시간 형식. 00부터 23까지
i : 분, 00부터 59까지
j : 앞에 0이 없는 일, 1부터 31까지(d 참고)
l (소문자 L) : 요일 이름, 문자열. Sunday 등
m : 월 숫자, 01부터 12까지
M : 월 이름, 3글자의 영문자. Jan, Feb 등
n : 월 숫자, 0이 붙지 않음. 1부터 12까지
O : 그리니치 시간(GMT기준)과의 차이, 예를 들면 +0200 (한국은 GMT+9 이므로 +0900쯤의 값이 나옴)
s : 초, 00부터 59까지
S : 날짜를 위한 영어의 서수 접미사. 예를 들면 "st", "nd" 등등(1st, 2nd 등으로 사용하는거 아시죠?)
t : 주어진 월의 일수 혹은 주어진 달의 마지막 일, 28부터 31까지
w : 요일 숫자, 0(일요일) 부터 6(토요일)
Y : 네자리 연도, 예) 1999
y : 두자리 연도, 예) 99
z : 해당 연도의 날짜수, 0부터 366까지
몇가지 빠진 것들이 있는데, 어떤 것인지는 스스로 알아서 공부해보도록 하세요. 자주 쓰이는 것들이 아니라서 빼두었으니 매뉴얼에서 찾아보고 이런 것들이 있었다...는 것 정도는 알고 넘어가시는 것이 좋습니다. 자... 그럼 만약에 "Year: 2003" 와 같이 출력하고 싶다면 어떻게 해야할까요? 보시면 Y,a,r 등이 파라미터 문자에 속해있어서 저대로 format string 에 썼다가는 각각 다른값으로 변해져서 나올 것이 뻔하죠. 그럴 경우에는 문자열 변수를 배울때 배웠던 이스케이프 문자 역슬래시 를 응용합니다.
e는 파라미터 문자에 속하지 않으므로 이스케이프 문자를 붙여주지 않아도 상관없습니다. 자자... 이제 기본기가 되었습니다. 다음은? 당연히 응용편으로 넘어갑니다.
24시간 전의 날짜는 어떻게 알 수 있을까요?
이해되시죠? 그럼 몇 가지 연습문제를 풀어보시고, 다음으로 넘어갑니다.
문제 1. 내일의 날짜를 "년-월-일 시:분:초" 형태로 출력하라.
문제 2. 오늘의 날짜에서 3일전의 날짜를 위와 같은 형태로 출력하라.
연습 문제를 다 푸셨나요? 그럼 다음은... mktime() 이라는 함수를 배워봅니다.
다행히 계산하려는 시간의 UNIXTIME 을 알고 있으면 좋겠지만, 만약 그렇지 않고 2000-3-12 의 형식에서 UNIXTIME 을 알아내야 할 때가 있는데 그 때 쓰이는 것이 바로 mktime 입니다. mktime의 함수 정의는 다음과 같습니다.
int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])
척 보면 이해가 되실 듯~ 저 중 생략가능한 is_dst 는 daylight saving time 의 약자로 일광절약시간인가 아닌가를 1과 0으로 나타내도록 하고 있습니다. 우리나라 정서와는 별로 맞지 않은 부분이죠. 아마도 쓸일이 거의 없을 것 같습니다. 제 강의를 보실 때마다 매뉴얼을 펴고 계시는 분이라면...(아주 바람직한 태도입니다) mktime() 함수 설명에 있는 Example 1 이 보이실 겁니다.
보니까 이해가 팍팍 되시죠? 물론, 위의 소스 모두 잘 작동되는 소스들입니다. ^^;
다음으로 재미있는 것은 strtotime()인데 이것을 잘만 사용하면 시간관련 계산을 편하게 할 수 있습니다. 여태껏 배워왔던 것만 이용한다면 현재 날짜에서 3일을 더하라...라고 했을 때 86400*3 을 계산하거나 코딩하셨어야 할 겁니다. 그렇지만 이런 사용도 가능하죠.
재미있죠? 그냥 문자를 써주는 것 만으로도 가능합니다. 매뉴얼에도 나와있듯이 다음의 사용도 가능합니다.
물론 영어가 좀 되야 편하겠지만, 안되도 저정도 연산은 편하게 하실 줄로 압니다. strtotime의 원래 기능은 문자열을 시간으로 바꾸어 주는 것인데, 문자열이라는게 "10 September 2000" 처럼 영문에 맞춰져 있는 것이라 토종(?) 프로그래머들이 사용할 일은 그다지 없어 보여서 생략하고 넘어갑니다. 보다 자세하게 함수의 기능을 알고 싶으시면 Manual을 찬찬히 살펴보시기 바랍니다.
그럼 날짜 계산에 대한 부분이 끝났죠? ^^;; 간단하게 계산하시라고 올렸는데, 어렵게 말하지는 않았는지 모르겠네요.
간단하게 몇가지 응용문제를 넣어봅니다. 많이 해보는 것이 프로그래밍 실력을 기르는 가장 바람직한 방법입니다. +_+ 제가 내드린 과제말고도 다른 과제를 스스로 만들어서 한번 해보세요. 웹관련 질답란에서 "날짜" 나 "시간" 으로 검색해서 올라온 질문들을 한번씩 풀어보는 것도 좋습니다. ^^;
예제) 2000-8-24 (제 여자친구랑 만난날...+_+ 그게 지금 왜나와! 퍽!) 부터 오늘까지 몇 일이 지났나 알아보는 예제입니다.
우선 2000-8-24 일의 UNIXTIME 형식을 구합니다.
그 다음은 오늘날짜에서(오늘이 더 크니까) 저 시간을 빼줍니다.
그럼 오늘이 2000년 8월 24일에서 몇일이 지났는지 초단위로 구할 수 있습니다. 이걸 이제 일 단위로 변환시키는데 그러기 위해서는 초단위를 일단위로 변경해야합니다.
그렇지만 86400으로 나눈다고 해서 바로 일단위가 되는 것은 아닙니다. 현재의 시간이 2000년 8월 24일의 기준인 0시 0분 0초와 같으라는 법이 없기 때문에 오차가 생긴만큼 소숫점도 생겨버리게 됩니다. 이걸 과감하게 소숫점 뒷자리를 버리고 정수형태로 바꿔주는 거죠. 그럼 이제 최종적으로 몇일 인지 알 수 있게 되어서 최종 소스는 다음과 같습니다.
이해 하셨으리라고 보고 문제를 올립니다. 과제를 스스로의 힘으로 하나하나 해결해나가는 기쁨을 느껴보세요. ^^;;
문제 1. 2003-10-31일은 2002-3-7 과 몇 일 차이가 나는가?
문제 2. 2000년 2월은 몇일까지 있었는가?
문제 3. 2002년 5월 마지막 일의 요일은?
문제 4. 태어나서 오늘까지 매일 하루 세끼를 꼬박꼬박 먹는다고 했을때, 몇 그릇이나 드셨어요?
P.S//아직까지 욕이나 기타 악플성 글들이 없어서 좋다고 생각은 하지만 추천도 없는 것이... -_-;;
강의가 별로 인 것인가...
지금 7강까지 윈도우즈 도움말 형식으로 만들어 두었는데, 기초편이 7강까지라 우선 링크해볼까....하는 생각도 가지고 있습니다만, 윈도우즈 도움말도 만들기가 워낙에 어려운데다가 처음 만들어보는 거라 허접하기때문에.. 욕먹을 것 같아서 관둬버렸습니다. -_-;; 원하시는 분이 있다면 우선 개인적으로 드릴수도... 쿨럭~
사실, 시간에 관련된 개념이나 함수는 그다지 많지 않습니다. 다만, 몇가지 안되는 이것들을 잘 조합하는 법을 잘 모르시는 분이 많아서 질문답변란에서 심심치 않게 볼 수 있는 질문이 되어버렸습니다. ^^;; 그래서 오늘은 시간을 다루는 법에 대해서 강의를 하도록 하겠습니다. 에헴~
우선은 UNIXTIME(정확히는 UNIX Timestamp입니다) 이라는 시간체계를 알아둘 필요가 있습니다. UNIXTIME은 정수형 숫자인데, 1970년 1월 1일 0시 0분 0초 GMT 시간이후 지난 시간을 초로 환산한 것입니다. 머... 기준은 알아둘 필요가 없고, 다만 "초 단위"라는 것만 기억하시면 되겠습니다. 즉 UNIXTIME 으로 현재시간에서 1시간 뒤를 구하려면 UNIXTIME(현재시간) + 3600 을 하면 된다는 것이죠. UNIXTIME 에 대한 이해가 되시는지요?
PHP에서 현재의 UNIXTIME 값을 구하는 함수가 있는데 바로 time() 입니다. 간단하게 다음 소스를 실행해서 확인해볼 수 있습니다.
echo time();
제가 말했던 대로 숫자로 나타나죠? ^^ 그렇다고 이걸 가지고 다른 사람들한테 이게 현재시간이니까 알아서들 해석해라...라고 할 수는 없으니 이것을 사람이 읽기 편한 형태로 바꿔주는 함수가 있는데 그것이 바로 date() 함수입니다. date 함수의 정의는 다음과 같습니다.
string date ( string format [, int timestamp])
즉 반환되는 값은 string - 문자열형이며 format 으로 이 형태를 지정해주게 됩니다. 뒤쪽에 보면 대괄호로 둘러싸인 부분이 있는데 이 부분은 생략도 가능하다는 뜻입니다. 즉, date( "Y-m-d" ) 와 같은 사용도 가능하며 date( "Y-m-d", 1000000 ) 과 같은 형태도 사용가능하다는 의미입니다. 뒷부분을 생략하면 date의 기준은 현재 시각이 됩니다.
date( "Y-m-d" )과 date( "Y-m-d", time() ) 는 같은 의미라는 거죠. 저 Y-m-d가 무엇을 의미하는지 궁금하시죠? 이제부터 알려드립니다. ^^ format 은 말 그대로 date에서 어떤 식으로 날짜를 변환하는가에 대한 형식인데, format 의 파라미터 문자들은 다음과 같습니다.
a : am 과 pm 중 현재 시간에 맞는 것을 출력한다.
A : AM 과 PM 중 현재 시간에 맞는 것을 출력한다.
d : 일(day), 앞에 0이 붙은 2자리 숫자, 01부터 31까지
D : 요일 이름, 3글자의 영문자. Sun, Mon 등
F : 월 이름, 문자열. January, Febrary 등
g : 시, 0이 붙지 않는 12시간 형식, 1부터 12까지(a, A 등과 사용하지 않으면 시간 혼동의 우려 있음)
G : 시, 0이 붙지 않는 24시간 형식.
h : 시, 12시간 형식. 01부터 12까지
H : 시, 24시간 형식. 00부터 23까지
i : 분, 00부터 59까지
j : 앞에 0이 없는 일, 1부터 31까지(d 참고)
l (소문자 L) : 요일 이름, 문자열. Sunday 등
m : 월 숫자, 01부터 12까지
M : 월 이름, 3글자의 영문자. Jan, Feb 등
n : 월 숫자, 0이 붙지 않음. 1부터 12까지
O : 그리니치 시간(GMT기준)과의 차이, 예를 들면 +0200 (한국은 GMT+9 이므로 +0900쯤의 값이 나옴)
s : 초, 00부터 59까지
S : 날짜를 위한 영어의 서수 접미사. 예를 들면 "st", "nd" 등등(1st, 2nd 등으로 사용하는거 아시죠?)
t : 주어진 월의 일수 혹은 주어진 달의 마지막 일, 28부터 31까지
w : 요일 숫자, 0(일요일) 부터 6(토요일)
Y : 네자리 연도, 예) 1999
y : 두자리 연도, 예) 99
z : 해당 연도의 날짜수, 0부터 366까지
몇가지 빠진 것들이 있는데, 어떤 것인지는 스스로 알아서 공부해보도록 하세요. 자주 쓰이는 것들이 아니라서 빼두었으니 매뉴얼에서 찾아보고 이런 것들이 있었다...는 것 정도는 알고 넘어가시는 것이 좋습니다. 자... 그럼 만약에 "Year: 2003" 와 같이 출력하고 싶다면 어떻게 해야할까요? 보시면 Y,a,r 등이 파라미터 문자에 속해있어서 저대로 format string 에 썼다가는 각각 다른값으로 변해져서 나올 것이 뻔하죠. 그럴 경우에는 문자열 변수를 배울때 배웠던 이스케이프 문자 역슬래시 를 응용합니다.
echo date("Year");
e는 파라미터 문자에 속하지 않으므로 이스케이프 문자를 붙여주지 않아도 상관없습니다. 자자... 이제 기본기가 되었습니다. 다음은? 당연히 응용편으로 넘어갑니다.
24시간 전의 날짜는 어떻게 알 수 있을까요?
date("Y-m-d H:i:s", time() - 86400);
이해되시죠? 그럼 몇 가지 연습문제를 풀어보시고, 다음으로 넘어갑니다.
문제 1. 내일의 날짜를 "년-월-일 시:분:초" 형태로 출력하라.
문제 2. 오늘의 날짜에서 3일전의 날짜를 위와 같은 형태로 출력하라.
연습 문제를 다 푸셨나요? 그럼 다음은... mktime() 이라는 함수를 배워봅니다.
다행히 계산하려는 시간의 UNIXTIME 을 알고 있으면 좋겠지만, 만약 그렇지 않고 2000-3-12 의 형식에서 UNIXTIME 을 알아내야 할 때가 있는데 그 때 쓰이는 것이 바로 mktime 입니다. mktime의 함수 정의는 다음과 같습니다.
int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])
척 보면 이해가 되실 듯~ 저 중 생략가능한 is_dst 는 daylight saving time 의 약자로 일광절약시간인가 아닌가를 1과 0으로 나타내도록 하고 있습니다. 우리나라 정서와는 별로 맞지 않은 부분이죠. 아마도 쓸일이 거의 없을 것 같습니다. 제 강의를 보실 때마다 매뉴얼을 펴고 계시는 분이라면...(아주 바람직한 태도입니다) mktime() 함수 설명에 있는 Example 1 이 보이실 겁니다.
echo date ("Y-M-d", mktime (0,0,0,12,32,1997));
echo date ("Y-M-d", mktime (0,0,0,13,1,1997));
echo date ("Y-M-d", mktime (0,0,0,1,1,1998));
echo date ("Y-M-d", mktime (0,0,0,1,1,98));
echo date ("Y-M-d", mktime (0,0,0,13,1,1997));
echo date ("Y-M-d", mktime (0,0,0,1,1,1998));
echo date ("Y-M-d", mktime (0,0,0,1,1,98));
보니까 이해가 팍팍 되시죠? 물론, 위의 소스 모두 잘 작동되는 소스들입니다. ^^;
다음으로 재미있는 것은 strtotime()인데 이것을 잘만 사용하면 시간관련 계산을 편하게 할 수 있습니다. 여태껏 배워왔던 것만 이용한다면 현재 날짜에서 3일을 더하라...라고 했을 때 86400*3 을 계산하거나 코딩하셨어야 할 겁니다. 그렇지만 이런 사용도 가능하죠.
strtotime("+3 days", time());
재미있죠? 그냥 문자를 써주는 것 만으로도 가능합니다. 매뉴얼에도 나와있듯이 다음의 사용도 가능합니다.
strtotime ("+1 week 2 days 4 hours 2 seconds");
strtotime ("next Thursday");
strtotime ("last Monday");
strtotime ("next Thursday");
strtotime ("last Monday");
물론 영어가 좀 되야 편하겠지만, 안되도 저정도 연산은 편하게 하실 줄로 압니다. strtotime의 원래 기능은 문자열을 시간으로 바꾸어 주는 것인데, 문자열이라는게 "10 September 2000" 처럼 영문에 맞춰져 있는 것이라 토종(?) 프로그래머들이 사용할 일은 그다지 없어 보여서 생략하고 넘어갑니다. 보다 자세하게 함수의 기능을 알고 싶으시면 Manual을 찬찬히 살펴보시기 바랍니다.
그럼 날짜 계산에 대한 부분이 끝났죠? ^^;; 간단하게 계산하시라고 올렸는데, 어렵게 말하지는 않았는지 모르겠네요.
간단하게 몇가지 응용문제를 넣어봅니다. 많이 해보는 것이 프로그래밍 실력을 기르는 가장 바람직한 방법입니다. +_+ 제가 내드린 과제말고도 다른 과제를 스스로 만들어서 한번 해보세요. 웹관련 질답란에서 "날짜" 나 "시간" 으로 검색해서 올라온 질문들을 한번씩 풀어보는 것도 좋습니다. ^^;
예제) 2000-8-24 (제 여자친구랑 만난날...+_+ 그게 지금 왜나와! 퍽!) 부터 오늘까지 몇 일이 지났나 알아보는 예제입니다.
우선 2000-8-24 일의 UNIXTIME 형식을 구합니다.
mktime(0,0,0,8,24,2000);
그 다음은 오늘날짜에서(오늘이 더 크니까) 저 시간을 빼줍니다.
time() - mktime(0,0,0,8,24,2000);
그럼 오늘이 2000년 8월 24일에서 몇일이 지났는지 초단위로 구할 수 있습니다. 이걸 이제 일 단위로 변환시키는데 그러기 위해서는 초단위를 일단위로 변경해야합니다.
(time() - mktime(0,0,0,8,24,2000))/86400;
그렇지만 86400으로 나눈다고 해서 바로 일단위가 되는 것은 아닙니다. 현재의 시간이 2000년 8월 24일의 기준인 0시 0분 0초와 같으라는 법이 없기 때문에 오차가 생긴만큼 소숫점도 생겨버리게 됩니다. 이걸 과감하게 소숫점 뒷자리를 버리고 정수형태로 바꿔주는 거죠. 그럼 이제 최종적으로 몇일 인지 알 수 있게 되어서 최종 소스는 다음과 같습니다.
<?php
$days = floor( ( time() - mktime(0,0,0,8,24,2000) )/86400 ); //floor 함수는 "버림" 함수입니다. ceil()과 round() 에 대해서도 찾아보세요.
echo $days." 일";
?>
$days = floor( ( time() - mktime(0,0,0,8,24,2000) )/86400 ); //floor 함수는 "버림" 함수입니다. ceil()과 round() 에 대해서도 찾아보세요.
echo $days." 일";
?>
이해 하셨으리라고 보고 문제를 올립니다. 과제를 스스로의 힘으로 하나하나 해결해나가는 기쁨을 느껴보세요. ^^;;
문제 1. 2003-10-31일은 2002-3-7 과 몇 일 차이가 나는가?
문제 2. 2000년 2월은 몇일까지 있었는가?
문제 3. 2002년 5월 마지막 일의 요일은?
문제 4. 태어나서 오늘까지 매일 하루 세끼를 꼬박꼬박 먹는다고 했을때, 몇 그릇이나 드셨어요?
P.S//아직까지 욕이나 기타 악플성 글들이 없어서 좋다고 생각은 하지만 추천도 없는 것이... -_-;;
강의가 별로 인 것인가...
댓글 18
-
絶世美男@
2003.04.13 07:11
-
絶世美男@
2003.04.13 07:11
여기에 무엇을 더 추가를 해줘야 새로고침을 해도 계속 이어서 카운트다운이 될까요? -
행복한고니
2003.04.13 07:36
var itemTime = new Date(1970,1,0,0,0,07);
이 부분을 수정하셔야 되는데... -_-;;
이 스크립트가 옥션같은곳에서 볼 수 있는 카운트 다운 스크립트인가 보군요.
경매 종료 시간과 현재 시간의 차이를 구해서 그걸 날짜인 것 처럼 바꾸어 준 것입니다. 그래서 3시간이 남았다고 하면 1970년 1월 1일 3시쯤으로 날짜를 세팅하도록 되어있습니다. 위에서 지적한 부분을 PHP로 다루고 서버 시간에 따라서 유동적으로 변하도록 하면 됩니다. 참고로 자바스크립트에서의 Date 객체는 다음과 같이 정의됩니다.
Date(year, month, date[, hours[, minutes[, seconds[,ms]]]])
제 강의를 보셨다면 대강 이해는 하시리라... -_-;;
P.S// 질문은 질문하는 곳에서 할 때 가장 아름답습니다. -
絶世美男@
2003.04.13 08:48
네 감사합니다.-,.-;;
아무리 해도 질답란을 비롯해서 여기저기 사이트에 질문을 올려도 답해주시는 분이 없었거든요
그런데 우연히 고니님의 시간 강의를 보고 고니님이라면 아실꺼 같아서 여기다가 염치없이 질문을 올린겁니다. -
絶世美男@
2003.04.13 08:53
그나저나 조언을 해주셨는데도 이 초보에겐 무리인가봅니다..ㅎㅎ -
행복한고니
2003.04.13 09:07
질문하신 곳에 답변 드렸습니다. ^^ -
에지
2003.04.13 18:44
지금 시간을 알려면 그냥 간단히 date("원하는거.."); 해주면 되는데...;;; -
TheMics
2003.04.13 19:03
에지//프로그래밍할때 타임스탬프값이 굉장히 중요하게 쓰이니까 알아둬야죠;;
행복한고니//시리즈물에는 원래 추천이 별로 안붙으니 걱정마세요; -
행복한고니
2003.04.13 20:01
에지// 그 부분도 이미 언급해놓았는걸요? -_-??
다만, 말하려고 했던 것은 스스로 응용하는 법을 익히게 하기 위함이었기 때문에, UNIXTIME 형을 언급하고 이것을 기준으로 설명한 거죠. -
yjae
2003.04.15 02:06
timezone 설정 기능은 있는지요...? ^^; -
행복한고니
2003.04.15 03:03
timezone 이라고 하면 아마도 서울, 동경, 뉴욕 등등 윈도우즈의 시간대 설정같은 메뉴를 말씀하시는 건지요? 그렇다면 당연히 없습니다. 왜냐하면 PHP의 기준 시간은 어차피 서버의 기준시간입니다. 즉, 만약에 미국 뉴욕에 있는 서버에서 PHP를 돌린다고 하면 그 PHP의 시간은 미국 뉴욕의 시간으로 돌아가게 되어있는 것입니다. 물론, 미국 뉴욕에 서버가 있어도 대한민국 서울로 서버의 시간을 맞추어 두면 PHP의 시간기준은 대한민국 서울을 기준으로 작동합니다.
만약, 여러가지 시간대를 설정할 필요가 있는 프로그램이라면 GMT 시간을 기준으로 작성하시기를 권합니다. 참고로 GMT(Greenwich Mean Time) 란 영국의 그리니치를 기준으로 한 표준시이며 우리나라는 GMT+9(시간) 입니다. -
jimmie Kwak
2003.04.27 02:05
고니님. 시간대가 미국인 사람이 한국 서버에 연결해 홈을 만들때, 어떻게 시간을 바꿔야 하나요?
제로 보드를 사용하는데 , 어디서 무엇을 어떻게 바꿔야 하는지 모르겠네요.
php, mysql에 있는 시간함수를 다 바꾸어야하나요?
질문이 너무 광범위하죠. 죄송합니다. -
ZipShin
2003.04.27 19:31
UNIX시간 말고.. LINUX시간도 안따라 주나요? -
행복한고니
2003.04.30 16:08
jimmie Kwak님//
답변이 늦어서 죄송합니다. 최근에 좀 바빠서... 미국 같은 경우는 좀 애매하겠네요.
한국은 땅덩어리가 좁아서 타임존(timezone - 시간대)이 하나지만, 미국은 5개정도 되니까(하와이, 알라스카 포함) 서버시간을 이용한다는 것 자체가 좀 애매하지 않나 싶습니다. 만약 미국 특정지역을 기준으로 서버 시간을 잡고 싶으시면...
한국은 GMT + 9
미국(동부표준시)은 GMT - 5
이니까 한국시간에서 14시간을 빼주시면 됩니다. *^^* 14시간 빼는 법은 아시겠죠? mysql을 건드릴 필요는 없습니다.
그냥 뽑아온 시간에서 14시간 즉, 유닉스 타임형식이라면 14 * 3600 을 빼주시면 되니까요.
ZipShin님//
UNIX에서 써서 UNIXTIME 형식이 아닙니다. 유닉스계열에서 1970년 1월 1일 0시를 기준으로 한 초단위 정수형을 시간형식으로 쓰자고 했고 사용했기 때문에 고유의 UNIXTIME이라고 부를 뿐입니다. 그냥 하나의 형식일 뿐이지 OS에 국한된 것은 아니라는 거죠. 리눅스에서 쓰건 윈도우에서 쓰건 상관없습니다. -
코퍼
2003.05.12 14:52
현재날짜의 섬머타임을 표기하는 방법은 뭐가 있나요?
않쓸거 같았는데 여행관련 사이트를 만드니까 필요하군요.
그냥 미국시간은 저도 바로 위의 방법을 사용했습니다. -
행복한고니
2003.05.13 02:19
코퍼님//
섬머타임을 표기하는 방법은 따로 없습니다.
다만, date 함수의 I(i의 대문자)를 포맷으로 쓰면 1과 0으로 현재 시간이 섬머타임인지 아닌지를 알려줍니다(Daylight Saving Time 이라고 하더군요, summer time 은 영국식 표현입니다). 만약 현재 날짜의 섬머타임시간을 표현하려면 반환값이 1일때 현재 시간에서 1시간을 빼주면 될 것입니다. 서버의 시간을 변경하는 일은 없으므로, 만약 섬머타임이 적용된 곳이라면 일상의 시간이 서버의 시간보다 1시간이 빠르겠지요. ^^;; -
장소연
2003.10.24 10:08
echo date("Year"); 부분을 echo date('Year'); <- 이렇게 바꾸셔야 겠네요 ^-^;;
(다른 분들처럼 어려운 건 모르겠고.. 시키는대로 하다가 안되는 부분만 ^-^;;)
n, r은 개행문자<?>니까 " " 안에 넣으면 화면에 표시가 안되네요 ^-^a
몇달 전 강좌지만 -_) 꽤 열심히 보고 있다는;; -
장소연
2003.10.24 10:49
echo date("Y-m-d H:m:s"); <- 이 부분도 m이 month로 해석되네요 -_-;;;
echo date("Y-m-d H:i:s"); 이렇게 바꿔줘야 제대로 된 시간이 나오네요 ^-^;;
(다들 알고 계실테지만 -_) 저 같은 초보들도 있으니 ㅠ-ㅠ;;)
제목 | 글쓴이 | 날짜 |
---|---|---|
군대간 친구 남은날짜 계산하기 [6] | xacdo | 2003.04.27 |
유용한 일반 함수 모음;ㅁ; [11] | TheMics | 2003.04.23 |
노프레임+프레임없이 접근막기+게시물 링크하기 [3] | teslaMINT | 2003.04.20 |
PHP 혼자 공부하기 - 12 :: SQL문 [6] | 행복한고니 | 2003.04.20 |
데이터베이스, PHP를 만나면「알짜 사이트로 부활!」 [1] | .maya | 2003.04.18 |
[mics'php] 2. PHP 사용 시스템 구축하기 [3] | TheMics | 2003.04.17 |
[mics'php] 1. PHP란? [8] | TheMics | 2003.04.16 |
PHP 혼자 공부하기 - 11 :: 정규식 실전예제 [9] | 행복한고니 | 2003.04.16 |
PHP 혼자 공부하기 - 10 :: 정규식 패턴 문법 [3] | 행복한고니 | 2003.04.15 |
PHP 혼자 공부하기 - 9 :: 정규식 함수 [3] | 행복한고니 | 2003.04.14 |
PHP 혼자 공부하기 - 8 :: 시간다루기 [18] | 행복한고니 | 2003.04.13 |
PHP 혼자 공부하기 - 7 :: 제어문과 함수 [7] | 행복한고니 | 2003.04.12 |
[mics'php] 들어가기 전에 [1] | TheMics | 2003.04.11 |
PHP 혼자 공부하기 - 6 :: 연산자 [7] | 행복한고니 | 2003.04.11 |
PHP 혼자 공부하기 - 5 :: 변수 [4] | 행복한고니 | 2003.04.10 |
PHP 혼자 공부하기 - 4 :: 미리 정의된 변수 [13] | 행복한고니 | 2003.04.09 |
PHP 혼자 공부하기 - 3 :: 변수형 [8] | 행복한고니 | 2003.04.09 |
PHP 혼자 공부하기 - 2 :: PHP의 시작 [9] | 행복한고니 | 2003.04.09 |
PHP 혼자 공부하기 - 1 :: 준비물 [3] | 행복한고니 | 2003.04.09 |
개판 오분전 세션 - 7 [10] | 미친개 | 2003.04.08 |
그런데 제가 그 스크립을 재 홈에서 적용해본 상태에서 새로고침을 하면 다시 첨부터 카운터다운이 되더군요 아무래도 php언어가 들어가 있는거 같은데 이거때문에 막혀서 일주일째 아무것도 못하고 잇습니다. 한번만 봐주셨으면 합니다.
제가 쓰려는 스크립은 이겁니다..
<style type="text/css">
BODY,TD,SELECT,input,DIV,form,TEXTAREA,center,option,pre,blockquote {font-size:8pt; font-family:tahoma,verdana,굴림; color:666666; line-height:145%}
A:link {font-family:tahoma,굴림;font-size:8pt;color:023651;text-decoration:none;}
A:visited {font-family:tahoma,굴림;font-size:8pt;color:023651;text-decoration:none;}
A:active {font-family:tahoma,굴림;font-size:8pt;color:023651;text-decoration:none;}
A:hover {font-family:tahoma,굴림;font-size:8pt;color:023651;text-decoration:none}
</style>
<script language="javascript">
function viewMsg(strDisp) {
if (document.readyState == 'complete') {
if ( parseInt(0) == 940 && (parseInt(document.uniform.want.value) > parseInt(0)) ) {
strDisp = "바로구매마감";
}
document.uniform.txtTime.value = strDisp;
}
}
var itemTime = new Date(1970,1,0,0,0,07);
var strTime;
var strDisp;
// 시간 조절
var remainTime = itemTime.getSeconds() - 1;
itemTime.setSeconds(remainTime);
function getTime1() {
if ( itemTime.getSeconds() == 30 || itemTime.getSeconds() == 00 ) {
remainTime = itemTime.getSeconds() - 1; //2
} else {
remainTime = itemTime.getSeconds() - 1;
}
itemTime.setSeconds(remainTime);
setTimeout("getTime1()",1000);
}
function viewTime() {
var strDisp = "";
if (itemTime.getDate() > 28 ) {
strTime = "";
} else {
strTime = itemTime.getDate() + "일 ";
}
strTime += itemTime.getHours() + "시간 " + itemTime.getMinutes() + "분 " + itemTime.getSeconds() + "초";
//alert(strTime);
if ( itemTime.getDate() > 28 && itemTime.getHours() == 0 && itemTime.getMinutes() == 0
&& itemTime.getSeconds() == 0 ) {
strDisp = "입찰마감";
viewMsg(strDisp);
for ( i = 0 ; i < document.all.vv.length ; i++ ) {
document.all.vv[i].style.visibility= document.all.vv[i].style.visibility=='hidden' ? '' : 'hidden';
}
for ( i = 0 ; i < document.all.d.length ; i++ ) {
document.all.d[i].style.display= document.all.d[i].style.display=='none' ? '' : 'none';
}
return;
} else {
strDisp = strTime;
viewMsg(strDisp);
}
if ( strDisp != "입찰마감" || strDisp != "구매마감" ) {
setTimeout("viewTime()",1000);
}
}
getTime1();
viewTime();
</script>
<form name="uniform" method="post">
<input type=text id="txtTime" size=30 style='color:red;font-size:12; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px' readonly>
<table><tr>
<td align="right" id=vv style="visibility:''"><b id=d style="display:''">
<input type=submit value="입찰" accesskey="s" class=submit style="font-size:11px;height:20">
</b></td>
</tr>
</table>
<table>
<tr bgcolor="#E4F3F9">
<td align="center" >
<B id=d style="display:''">
<br>
본 상품의 판매자
yallge
님과 상품구매계약함을 의미합니다.<br>
</B>
<B id=d style="display:none">경매 종료된 상품 입니다.</B>
</font>
</td>
</tr>
</table>