2013-03-24 5 views
1

PHP에서 두 개의 유닉스 타임 스탬프를 비교하는 데 문제가 있습니다.PHP는 UNIX 타임 스탬프를 비교합니다

$time_now = mktime(); 
if($auction->time_end > $time_now){ 
    //true 
} 
else{ 
    //false 
} 

$ auction-> time_end는 1362579127이고 db는 int로 설정됩니다. $ time_now는 예를 들어 1364129253이고 int로 설정됩니다. 둘 다 var_dump로 확인 중이며 둘 다 int로 반환됩니다.

문제는 PHP가 1362579127이 1364129253 (false를 반환하는 것)보다 크다고 생각하는 것 같습니다. 여기에 뭔가가 빠졌습니까? if 문에 값을 입력하면 정상적으로 작동하지만 객체를 비교할 때 그 값을 좋아하지 않는 것처럼 보입니다.

+1

것은 당신이 할 수있는'var_dump''$ auction-> time_end' 단지'if' 문 전에 정확한 출력이 여기에 보여 다음을 시도? 맞춤법 오류가 없으므로 복사/붙여 넣은 코드를 표시 할 수 있습니까? –

+1

오브젝트 int (1362579127) 및 mktime int (1364130453) –

답변

1

질문을 보면 논리가 잘못된 것처럼 보입니다. 현재 시간은 항상 과거의 시간보다 크다. `$의 time_now`과의

if($time_now>$auction->time_end){ 
//... 
} 
+1

오 하느님 .. 늦은 밤 코딩이 최고입니다. –

0

32 비트 시스템을 사용하는 경우 int 유형의 최대 값은 약 20 억으로 정의됩니다. 두 숫자가 너무 큰 것 같습니다. Documentation을 참조하십시오.

+1

의 Var 덤프 http : //codepad.org/BFWIhiiu – Antony

+4

@Sotapanna - 공정한 점이지만 이것이 문제라고 생각하지 않습니다. 동일한 문서에서 만약 인터프리터가 정수형의 경계를 넘는 숫자를 만난다면, 대신 float로 해석 될 것입니다. "* 그래서 비교에 영향을 미치지 않아야합니까? – Emissary

+0

@Emissary, true. 그러나 큰 숫자를 다루는 것은 명확한주의를 기울이지 않으면 문제가되는 것처럼 보입니다. 이러한 작업을 위해 BCMath 라이브러리를 사용하는 것이 좋습니다. http://php.net/manual/en/book.bc.php – stpn108

관련 문제