2013-07-22 4 views
1

YYYY-MM-DD 형식의 mysql 쿼리에서 날짜가 반환됩니다.날짜가 현재 날짜보다 3 개월 이상 경과했는지 확인하는 방법

이번 달의 내역이 인 경우 인 지 3 개월 이상인지 확인해야합니다.

나는 현재이 코드를 가지고 :

$passwordResetDate = $row['passwordReset']; 
$today = date('Y-m-d'); 

$splitCurrentDate = explode('-',$today); 
$currentMonth = $splitCurrentDate[1]; 

$splitResetDate = explode('-', $passwordResetDate); 
$resetMonth = $splitResetDate[1]; 

$diferenceInMonths = $splitCurrentDate[1] - $splitResetDate[1]; 

if ($diferenceInMonths > 3) { 
    $log->lwrite('Need to reset password'); 
} 
이 가진 문제가

, 그 현재 월 01의 월 값을 제공, 예를 들어, 월, 그리고 $resetMonth는 한 달에주는 11 월의 경우 값이 11이면 $differenceInMonths이 -10이되어 if() 문을 통과하지 않습니다.

전년도에 몇 달 동안이 문제를 해결하려면 어떻게해야합니까? 또는이 전체 루틴을 수행하는 더 좋은 방법이 있습니까?

+2

그냥 사용하여 쿼리 일의 차이를 선택할 수 있습니다 [DATEDIFF()] (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions. html # function_datediff) – Anigel

+1

당신은 PHP에서 이것을해야만한다면 (편집 : :) DATEDIFF()를 사용하여 MySQL에서이 작업을 수행 할 수 있지만 PHP에서 수행해야한다면 : http://stackoverflow.com/questions/2040560/how-to-find -none-of-two-dates-between-php를 사용하여 – Askanison4

답변

0

을 PHP의 내장이에 대한 DateTimeDateInterval 클래스.

<?php 

// create a DateTime representation of your start date 
// where $date is date in database 
$resetDate = new DateTime($date); 

// create a DateIntveral representation of 3 months 
$passwordExpiry = new DateInterval('3M'); 

// add DateInterval to DateTime 
$resetDate->add($passwordExpiry); 

// compare $resetDate to today’s date 
$difference = $resetDate->diff(new DateTime()); 
if ($difference->m > 3) { 
    // date is more than three months apart 
} 
+0

한 가지 예외가 있습니다. $ passwordExpiry 줄은 다음과 같이 읽어야합니다 :'$ passwordExpiry = new DateInterval ('P3M');'(당신은 contstruct에서 "P"를 잊었습니다 ...) – marky

+0

D' oh, 죄송합니다! 당신이 그것을 분류 해 줘서 기쁘다. –

1

사용 strtotime(),과 같이 : 이제

$today = time(); //todays date 
$twoMonthsLater = strtotime("+3 months", $today); //3 months later 

, 당신은 쉽게 비교하고 확인할 수 있습니다.

-1

SQL 식에서 날짜 비교를 할 것입니다.

그렇지 않으면, PHP는 날짜 문자열을 쉽게 조작 할 수 기능의 호스트가 : 내가 사용하는 것 PHP: Date/Time Functions - Manual

+1

OP가 리셋 간격을 변경해야한다면 어떻게됩니까? 아니면 OP가'DATEDIFF()'를 지원하지 않는 데이터베이스 엔진을 변경한다면? OP는 응용 프로그램에서 구성 값을 변경하는 대신 SQL 문을 다시 작성해야합니다. –

+0

그래서 PHP datetime 함수 사용을 제안했습니다. 두 가지 방법 모두주의 사항이 있습니다. 이 경우에는 이미 자신의 응용 프로그램에 대한 사용자 인증을 처리하는 저장 프로 시저가있을 수 있습니다.이 경우 SQL 문에이 기능을 추가하는 것이 쉽습니다 (물론이 데이터베이스 엔진이 지원합니다). – ElGavilan

관련 문제