2011-03-07 3 views
1

오늘 추가 한 모든 행을 가져오고 열 이름이 dnt (타임 스탬프)이지만 서버 timezone이 서버 시간대보다 12 시간 앞서 있습니다. 그렇다면 현재 결과를 얻으려면 SQL 쿼리가 필요합니다. 우리는 현재 다음을 사용하고 있습니다 ...모든 날짜를 선택하면 오늘과 같은 시간대가 적용됩니다.

SELECT * FROM messages where user = '$ user'AND DATE (dnt) = CURDATE();

그러나 시간대 차이로 인해 정확한 결과를 제공하지 않습니다.

감사합니다.

답변

1

내가 @MarvinLabs와 동의에 대한 gmmktime - 이것은 설계 결함이다. 당신은 그대로 디자인을 탈퇴하고자하는 경우

그러나 대신이를 사용해야합니다

SELECT * 
FROM messages 
WHERE user = '$user' 
    AND DATE(CONVERT_TZ(dnt,'source_timezone','destination_timezone')) = CURDATE() 
  • 변경 source-timezonedestination_timezone 따라

  • MySQL의 CONVERT_TZ() 참조 : here

+0

어떻게 소스와 desti를 알 수 있습니까? 국가 시간대? – seoppc

+0

소스 시간대는'dnt'의 시간대이고 대상 시간대는 DB 자체 (보통 서버의 시간대)입니다. – BigFatBaby

2

나는 모든 날짜가 GMT 시간대에 저장되어야한다고 제안합니다. 그런 다음 표시 할 때보기에서 변환됩니다. 이 방법을 사용하면 날짜를 쿼리해야 할 때 먼저 클라이언트 측 날짜를 GMT로 변환하여 SQL 쿼리에 직접 전달합니다. SQL 서버에는 서버 날짜가 아닌 GMT 날짜를 가져 오는 기능이 있습니다. PHP 함수를 사용하여 gmt 날짜를 가져 오는 대신 SQL 함수를 사용하는 대신 GMT 시간대의 현재 날짜를 쿼리 매개 변수로 전달할 수도 있습니다.

참조 : 예를

관련 문제