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입니까?
무한 루프되는 코드는 어디에 있습니까? – FoolishSeth
에포크 시간을 출력하면 브라우저의 로컬 시간에 표시되는'new date (epochValue)'로 JavaScript를 사용할 수 있으며 거기에서 사용할 수 있습니다. 데이터 전송에 에포크 시간을 사용하는 것은 시간대 문제 때문에 엄청난 두통의 가능성을 피하는 방법입니다. –
프로모션 페이지의 자바 스크립트 타이머가 0으로 계산되면 (박람회가 시작되었음을 의미) 무한 루프가 발생하고보기 페이지로 리디렉션됩니다. 그럼 제가 위에 붙여 넣은 PHP 코드는 박람회가 사용자를 다시 프로모션 페이지로 보냈다고 생각하지 않습니다. 이 단락의 시작 부분으로 돌아가십시오. – pogeybait