2014-08-31 5 views
0

내 SQL에 필드가 있습니다. 예 :날짜 문자열과 날짜를 비교하는 방법

field : expireddate  type : varchar (10) 

그것은 같은 $ expireddate = 31/08/2014 같은 데이터를 포함하고 오늘 날짜

$today = date("d/m/Y"); 

if ($query['expireddate']<$today){ 
    echo 'expired date'; 
} 
else 
{ 
    echo 'uptodate'; 
} 

과 비교하지만 그것은 작동하지 않습니다. 문자열을 날짜로 변환하려고했습니다 :

$expireddate=strtotime('d/m/Y','$query[expireddate]') 

아직 작동하지 않습니다.

제안 사항?

+0

물론 문자열이 왼쪽에서 오른쪽으로 문자 단위로 비교되고 'dd/mm/yyyy'는 그 점에서 "정렬 가능한"형식이 아니기 때문에 이것은 작동하지 않습니다. yyyy와 같은 것이 필요할 것입니다/mm/dd'입니다. 하지만 먼저 날짜를 텍스트로 저장하지 않는 것이 좋겠지 만 DBMS가 제공하는 지정된 유형 중 하나를 사용하고 PHP에서 다음과 같이 쿼리 내에서 비교를 수행하십시오. – CBroe

답변

0

그러나 "/"를 "-"로 바꾸면 제대로 작동합니다.

<?php 
$expireddate = "31/08/2014"; 
$today = date("d/m/Y"); 

$expireddate=strtotime(str_replace('/', '-', $expireddate)); 
$today=strtotime(str_replace('/', '-', $today)); 

if ($expireddate<$today){ 
    echo 'expired date'; 
} 
else 
{ 
    echo 'uptodate'; 
} 

?> 
0

은 문자열의 문자를 교체하거나 날짜 수학하지 않는 것이 좋습니다 strtotime()를 사용할 필요가 없습니다. PHP는 이런 종류의 일을 쉽게하기 위해 설계된 도구를 가지고 있습니다.

DateTime() 개체를 비교할 수 있어야합니다. 하지만 한 가지 문제는 날짜 형식이 표준이 아니라는 것입니다. 구분 기호로 /을 사용하면 PHP는 MM/DD/YYYY 형식으로 간주합니다. 따라서이를 극복하려면 DateTime::createFromFormat()을 사용해야합니다.

$today = new DateTime(); 
$expires = DateTime::createFromFormat('d/m/Y', $query['expireddate']); 

if ($expires < $today){ 
    echo 'expired date'; 
} 
else { 
    echo 'uptodate'; 
} 

조언 : 데이터베이스에 날짜를 문자열로 저장하지 마십시오. 더 중요한 것은 비표준 형식으로 저장하지 않는 것입니다. 그것은 간단한 당신이 데이터베이스를 쿼리 할 때 원하는 형식으로 날짜를 변환하는 당신은 문자열을 할 수없는 모든 데이터베이스의 날짜 기능을 활용할 수 있습니다 (적어도 그 문자열을 조작하지 않고도) 일이 훨씬 복잡해집니다.)

관련 문제