2014-01-19 2 views
0

날짜 목록이있는 MySQL 데이터베이스가 있습니다. 나는이 모든 날짜를 오늘 이후에 발생한다면 페이지로 출력하려고합니다. 날짜는 데이터베이스에 DATE 형식으로 Y-m-d으로 저장됩니다.이 PHP 날짜 비교가 예상대로 작동하지 않는 이유는 무엇입니까?

나는 (쿼리 등 제외) 다음 코드를 가지고 :

$dateToday = date('Y-m-d'); 

do{ 
    $dateCompare = new DateTime($row['date']); 
    if ($dateCompare > $dateToday){ 
     echo '<p>'.$dateCompare -> format('Y-m-d').'</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
}while ($row = $stmt->fetch(PDO::FETCH_ASSOC)); 

을하지만 이것은 단지 하나 내가 테스트 목적으로 과거에 설정을 포함한 모든 날짜를 출력한다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

당신이 잘못하고있는 가장 눈에 띄는 점은 애플리케이션 계층에서 당신의 DBMS에서 데이터 집합을 필터링한다. 이 작업은 DBMS 계층에서 수행해야합니다. 다음으로 잘못하고있는 것은 데이터의 형식과 유형에 대한 가정을 만드는 것입니다. 비교 대상 값이 무엇인지 보여줍니다. – symcbean

+0

처음 두 문장의 의미가 무엇인지 모르겠다. – ElendilTheTall

답변

3

$dateToday은 문자열입니다. $dateCompareDateTime 개체입니다.

+0

그래서 $ dateToday로 변환하려면'strtotime()'을 사용해야합니까? – ElendilTheTall

+0

사과와 오렌지를 비교하는 것은 결코 좋은 생각이 아니므로 둘 다 사과 또는 오렌지인지 확인하십시오. 그래서 둘 다'DateTime', 유닉스 타임 스탬프, 또는 비슷한 문자열 (ISO8601 형식)을 갖도록하십시오. 대부분의 경우 유닉스 타임 스탬프로 갈 것입니다. –

+0

감사합니다.'$ dateToday'를'new DateTime ('now');로 지정하면 완벽합니다. – ElendilTheTall

0

mysql의 날짜를 datetime 객체로 변환하여 출력하십시오.

$changetime = new DateTime($time, new DateTimeZone('UTC')); 

    ECHO $changetime->format('m/d/y h:i a'); 

// list of timezones http://us1.php.net/manual/en/timezones.php 

실제로 모든 MYSQL datetime 데이터를 출력하는 데 사용합니다. 모든 시간대로 변환 할 수 있습니다. 참고로, 이것은 datetime이 UTC로 가정합니다. 시간대로 변환해야합니다.

0
$stmt->setFetchMode(PDO::FETCH_ASSOC); 
foreach ($stmt as $row) { 
    $time = strtotime($row['date']); 
    if ($_SERVER['REQUEST_TIME'] - $time) { 
     echo '<p>'. date('Y-m-d', $time) . '</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
} 
관련 문제