2013-07-18 4 views
5

DateTime이 정확히 DateInterval과 일치하는지 확인하려고합니다. 내가 사용하고있는 간격은 'Nth Xday of 다음 달'형식 형식 사양을 허용해야하며 그러한 조건이 주어지면 이러한 일이 가능할지는 확신 할 수 없습니다.php - DateTime이 DateInterval에 속하는지 여부를 확인하십시오.

내 기본적인 아이디어는 원래 DateTime의 복제에 적용의 DateInterval을 반전 그것이로 다시 넣어 다시 적용하고 두 DateTime 인스턴스가 같은지 인 경우 다음 확인 하였다. (

public static function dateFallsOnPeriod(DateTime $date, DateInterval $interval) 
{ 
    $compare = clone $date; 

    // invert the period, apply it to the date, uninvert & then reapply 
    $interval->invert = 1; 
    $compare->add($interval); 
    $interval->invert = 0; 
    $compare->add($interval); 

    return $date == $compare; 
} 

이 같은 방향으로 두 번 간격을 적용 듯하고, 그래서 치명적인 오류 "날짜 시간 :: 하위 결과, ->sub()->add()을 사용하여 다시 시도 : 그렇다면, 그것은 정확히 간격으로 발생) : 비 특수 상대 시간 지정 만 뺄셈을 지원합니다. " 이런 종류의 기능이 전혀 구현되지 않은 것 같습니다.

못생긴 & 시작 날짜 뒤에서 오프셋을 선택하고 이후에 반복적으로 수행하는 비효율적 인 해결책 대신 누가 더 좋은 아이디어를 갖고 있습니까?

미리 감사드립니다.

+1

'invert'는 하위 테스트를 수행합니다. 귀하의 하위 및 추가 취소 서로. 그것은 처음에 $ compare == $ date를 확인하는 것으로 말합니다. – DevZer0

+0

예를 들어 질문을 정리해 주시겠습니까? 필자의 함수 이름은 마침표가 날짜와 일치하는지 확인하려고하지만 DateTime과 DateInteral을 함수 대신에 전달합니다 (예 : DateTime 및 DatePeriod). – luttkens

+0

그 방법은'dateCoincidesWithInterval'라고 불려야한다고 생각합니다. 미안 해요. @ DevZer0 : 추가, 뺄셈 및 비교가 항상 PHP가 허용하는 특별한 간격으로 인해 서로를 취소하지 않는 이유가 있습니다. 따라서 간격이 "첫 번째 일요일"을 지정하고 월요일을'$ date '로 전달한 경우 첫 번째 날짜가 간격에 맞지 않는다는 것을 알고 싶을 것입니다. 당신이 말하는 것보다 더 정상적인 간격을 위해이 방법이 실제로 필요하지는 않습니다. 그러나 나는이 모든 가능성을 다루고 싶습니다. – pospi

답변

0

하나의 가능성은 datetime에서 유닉스 타임 스탬프를 생성하고 정수 값을 비교하는 것입니다.

0

tuxnani에 동의합니다. 모든 날짜를 strtotime()으로 유닉스 형식으로 변환하는 것이 훨씬 쉽습니다. 숫자 값을 더 많거나 적게 비교하면됩니다.

관련 문제