2011-02-14 3 views
0

다음과 같은 문제점이 있습니다. PHP에서 두 datetime 값을 비교하려고하지만 계산이 유효하지 않습니다. 약 8 시간의 차이가 있습니다. Y-m 차원 H : I는 데이터베이스의 시간 값은 다음과 같은 형식이다 WAMPServerPHP Datetime

if(strtotime($date_time_from_db) < time()) 
{ 
    // do something 
} 

를 사용하여 내 발전 시스템에 오전 I : S. 이 작업을 어떻게 정확하게 수행 할 수 있습니까? 또한, 시간() 좋은 생각을 사용하고 있습니까? 사용자가 컴퓨터에서 시간을 변경하면 어떻게됩니까?

대단히 감사합니다.

+0

몇 가지 실제 값을 표시 할 수 있습니까? 차이점은 시간대가 될 가능성이 있습니다 –

+0

데이터베이스에서 타임 스탬프를 사용하는 것이 좋습니다. 또한 사용자가 자신의 컴퓨터에서 시간을 변경하더라도 스크립트가 호스팅되는 컴퓨터에서 time()이 호출되기 때문에 문제가되지 않습니다. 다른 한편, 기계 시간이 변경되면 시간이 일치하지 않을 위험이 있습니다. –

+0

거의 모든 경우에 사용자가 컴퓨터에서 시간을 변경하면 어떻게됩니까? overengineering의 좋은 거래를 보여줍니다. – eykanal

답변

2

데이터베이스에서 해당 값을 가져 오는 경우 PHP에서 날짜/시간 비교를 수행하지 마십시오. 이는 전환의 이중 왕복을 포함합니다 : 날짜/시간 -> 텍스트 -> 날짜 - 시간. 당신은 데이터베이스 수준에서 동일한 일을 수행 할 수 있습니다

인덱스의 사용 (잘) 할 수 있으며 (또한 좋은) 두 가지 유형 변환을 제거
SELECT ... 
FROM table 
WHERE datetimefield < now() 

.

사용자가 시간을 변경하는 경우 - 글쎄, 그건 사용자 컴퓨터 일뿐입니다. 판매용 앱의 일부로이 작업을 수행하지 않는 한, 사용자는 데이터베이스 서버의 시간에 절대적으로 영향을 미치지 않습니다.

+0

나는 데이터베이스에 가지 않고도이 작업을 수행 할 수 있기를 바랬지 만 작동 할 것입니다. 고맙습니다! – dtntcdr

+0

글쎄, 변수 이름은 데이터베이스를 사용하여 데이터를 시작한다는 것을 나타냅니다. 그러나 쿼리가 실제로 하나의 날짜/시간 값만을 가져 오는 경우 DB를 unix_timestamp (간단한 32 비트 정수)로 변환하고 PHP의 기본 내부 시간 표현 인 –

+0

을 테스트하면 방금 완벽하게 작동합니다. 정말 고맙습니다! 네, 이미 데이터베이스에서 데이터를 얻었으므로 CurrentTime으로 SELECT 문 NOW()를 추가 했으므로 두 번째로 작동합니다. – dtntcdr