2017-02-16 1 views
1

x 날짜보다 열등한 경우 다른 날짜와 현재 날짜의 차이가 참이면 true를 반환하는 함수를 만들었습니다. 여기 PHP DateTime diff 형식은 -0을 반환합니다.

내 기능입니다 :

private function notBeforeDate($date_to_compare, $interval) { 
    $now = new DateTime('now'); 
    $date = new DateTime($date_to_compare); 
    $diff = $now->diff($date)->format("%r%a"); 

    return $diff < $interval ? true : false; 
} 

하지만 $diff 것입니다 반환 -0 하루 한 것이다 반환 0을 같은 날짜를 보낼 때

예 (가정 현재 날짜는 2017-입니다 02-16) :

$this->notBeforeDate('2017-02-15', 1); // $diff = -1 
$this->notBeforeDate('2017-02-16', 1); // $diff = -0 
$this->notBeforeDate('2017-02-17', 1); // $diff = 0 
$this->notBeforeDate('2017-02-18', 1); // $diff = 1 

어떻게 내 $diff 변수에 좋은 가치를 위해 무엇을 할 수 있는가?

$this->notBeforeDate('2017-02-15', 1); // $diff = -1 
$this->notBeforeDate('2017-02-16', 1); // $diff = 0 
$this->notBeforeDate('2017-02-17', 1); // $diff = 1 
$this->notBeforeDate('2017-02-18', 1); // $diff = 2 
+0

일부 변경 사항은 잘 작동합니다. - https://eval.in/738465 –

+0

2017-02-17 및 2017-02-16은 모두 0을 반환합니다. 수신 된 날짜가 하루 +1 인 경우 '1'을 원합니다. – John

+0

시간을 반환하는 것처럼 'DateTime'소리가 들리지 않습니다. "지금"은 나를 위해 여기에있다 2017-02-16 13:48 마녀는 2017-02-16 00:00:00과 2017-02-17 00:00:00에서 어느 날보다 적다. 나는 당신의 일을 찾고 있다면'날짜'대신에 plaing을 제안 할 것이다. –

답변

0

DateTime("now")은 날짜와 시간을 반환합니다. 언제든지 "지금"이라고 주어진 시간은 타임 스탬프가 어느 방향 으로든지 24 시간보다 짧으면 같은 날짜 또는 다음 날짜의 어느 날보다 작을 것입니다.

당신이 문제에 대한 간단한 수정이 될 것이다 :

이 경우
private function notBeforeDate($date_to_compare, $interval) { 
    $now = new DateTime(Date("Y-m-d")); 
    $date = new DateTime($date_to_compare); 
    $diff = $now->diff($date)->format("%r%a"); 

    return $diff < $interval ? true : false; 
} 

이 시간 부분은 "지금"에서 제거됩니다. 더 나은 솔루션은 날짜가 아닌 시간 만 사용하는 솔루션을 만드는 것입니다.

예 : IF DateTime("now")은 '2017-02-16 12:00'을 반환하고 '2017-02-16 00:00:00'과 비교하면 0 일 -12 시간이됩니다. 그리고 '2017-02-17 00:00:00'과 비교하면 0 일 +12 시간이됩니다. 하루 diff를 요청하면 두 경우 모두 날 부분이 0이됩니다.

+0

왜 부정 투표입니까? 그 이유는 무엇입니까? –

+0

답변 해 주셔서 감사합니다. 잘 작동한다. 나는 왜 당신의 대답이 downvoted 모르겠어요. 왜 작동하는지 설명해 주시겠습니까? – John

+0

편집을 시작했습니다. 그것이 희망이 아니라면, 나는 더 설명하려고 노력할 것이다. –

0

이 당신에게 예상되는 결과를 줄 것이다 : 나는이 원하는

function notBeforeDate($date_to_compare) { 
    $now = date_create('now'); 
    $date = date_create($date_to_compare); 


    $diff=date_diff($now,$date); 
    return $diff->format("%r%a"); 
} 
var_dump(notBeforeDate('2017-02-17 12:48:00')) 
+0

죄송합니다. 긍정적이거나 부정적 인 값으로 편집했습니다 –

+0

답변으로 내 문제가 해결되지 않습니다. $ diff는 현재 날짜와 날짜가 항상 -0과 0이됩니다. +1 – John

관련 문제