2012-10-25 3 views
1

mktime은 신기원 (Jan 1 1970 00:00:00 GMT) 이후의 초 수를 반환하므로 타임 스탬프는 GMT를 기반으로합니다.PHP의 mktime() 함수는 시간대에 따라 다릅니 까?

학교 전시회를위한 PHP 웹 앱이 있으며 Kohana 3.2를 사용하여 작성되었습니다. 박람회 일정이 잡히면 박람회 "날짜"필드에 저장된 mktime을 사용하여 타임 스탬프를 만듭니다. 박람회가 시작되기 전에 박람회를 보려고하면 자동으로 박람회 홍보용 페이지로 연결됩니다. 프로모션 페이지를 보려고 시도하면 박람회가 시작되어보기 페이지로 전송됩니다. 그래서 당신은 내가 두 가지 수표를보고 있다는 것을 알 수 있습니다.

프로모션 페이지는 박람회 시간 기록을 숨겨진 필드에 저장하기 위해 PHP를 사용합니다. 자바 스크립트 카운트 다운 루틴은 타임 스탬프를 사용하여 호출되며 박람회 날짜와 현재 시간 (EST로 변환) 사이의 남은 시간을 계산하기 시작합니다. 타이머가 0에 도달하면 페어가 시작되고 페이지는보기 페이지로 리디렉션됩니다.

뷰 페이지는 공정이 시작되었는지 확인하는 몇 가지 코드 설정을 가지고 있으며, 그것은 다음과 같습니다

if(mktime() < $fair->date) Request::current()->redirect('/fair/promo/' . $id); 

위의 문은 타이머가 즉시 이동 곳이 다시 프로모션 페이지로 리디렉션 처리 그러나 때 0으로 설정하고 나를 다시보기 페이지로 보내려고합니다. 큰 무한 루프.

다음은 프로모션 페이지에서 자바 스크립트로 시간을 얻는 방법입니다.

var st = srvTime(); 
var d = new Date(st); 
var now = Math.round(d.getTime()/1000); 
now=now+3600; //adjust to EST 

따라서 질문은 mktime()으로 돌아갑니다. php.net에 따르면, 인수는 오른쪽에서 왼쪽으로 순서대로 생략 될 수 있으며 따라서 생략 된 인수는 현지 날짜 및 시간에 따라 현재 값으로 설정됩니다. " 그렇다면 CST의 서버에서 mktime()을 호출하면 에포크 = CST 시간 이후 경과 한 초 수가 Epoch입니까?

+0

무한 루프되는 코드는 어디에 있습니까? – FoolishSeth

+2

에포크 시간을 출력하면 브라우저의 로컬 시간에 표시되는'new date (epochValue)'로 JavaScript를 사용할 수 있으며 거기에서 사용할 수 있습니다. 데이터 전송에 에포크 시간을 사용하는 것은 시간대 문제 때문에 엄청난 두통의 가능성을 피하는 방법입니다. –

+0

프로모션 페이지의 자바 스크립트 타이머가 0으로 계산되면 (박람회가 시작되었음을 의미) 무한 루프가 발생하고보기 페이지로 리디렉션됩니다. 그럼 제가 위에 붙여 넣은 PHP 코드는 박람회가 사용자를 다시 프로모션 페이지로 보냈다고 생각하지 않습니다. 이 단락의 시작 부분으로 돌아가십시오. – pogeybait

답변

1

인수는 오른쪽에서 왼쪽으로 순서대로 생략 할 수 있습니다. 이렇게 생략 된 모든 인수는 현지 날짜 및 시간에 따라 에 따라 현재 값으로 설정됩니다.

+0

괜찮 았어. PHP mktime() 페이지에서 인용했습니다. – pogeybait

+0

그래서 args가없는 mktime()은 지역 날짜와 시간을 사용하여 그 시대부터 초를 반환합니다. CST 표준 시간대에 서버가있는 경우 타임 스탬프는 CST에 대한 것입니다? – pogeybait

+0

답변을 찾았습니다. 나는 Kohana를위한 bootstrap.php에 들어가서 필요한 표준 시간대를 EDT로 설정했습니다. 비록 당신이 Kohana 내가 date_default_timezone_set() 사용 PHP 명령을 몰라하더라도. 결정된! 예! – pogeybait