2017-02-19 1 views
0

PHP에서 date_diff를 사용 2017년 6월 3일PHP date_diff 함수가 손상 되었습니까?

가 과제로 (내게는이 기능의 복제를 만드는 작업이이

object(DateInterval)[6] 
    public 'y' => int 0 
    public 'm' => int 1 
    public 'd' => int 20 
    public 'h' => int 0 
    public 'i' => int 0 
    public 's' => int 0 
    public 'weekday' => int 0 
    public 'weekday_behavior' => int 0 
    public 'first_last_day_of' => int 0 
    public 'invert' => int 0 
    public 'days' => int 50 
    public 'special_type' => int 0 
    public 'special_amount' => int 0 
    public 'have_weekday_relative' => int 0 
    public 'have_special_relative' => int 0 

을 제공,이 두 날짜 2017년 4월 14일 고려). 그러나 나는 내 알고리즘을 통해이 날짜를 실행할 때 나는

object(stdClass)[4] 
    public 'years' => int 0 
    public 'months' => int 1 
    public 'days' => int 19 
    public 'total_days' => int 50 
    public 'invert' => int 0 

를 얻을 내가 손으로 일 수를 계산할 때 (수동) 나는 아직도 19 여분의 일로서이를 참조하십시오. 할당 솔루션을 찾고있는 것이 아닙니다. 하지만 어쩌면 일부 알고리즘 또는 아마도 date_diff 함수는 내가 인식하지 못하는 몇 가지 버그가 있습니까?

200 개 이상의 테스트 케이스에서 알고리즘은 작동하지만 7 개는 그렇지 않습니다. 항상 내 솔루션과 PHP 솔루션간에 하루 차이가 있습니다.

답변

1

한 달은 고정 일수가 아니므로, "1 개월"에 중점을 두어 달라집니다. 당신이 2017년 4월 14일에서 시작하여 첫 번째 전체 달이 걸릴 경우

당신은 얻을 것이다 :

  • 4/14 -> 5/14 : 1 개월 (30 일)
  • 5/14 -> 6/3 : 이십일

당신이 2017년 6월 3일에서 시작하고 뒤로 당신의 방법을 작동하는 경우 당신은 얻을 것이다 동안 :

  • 6/3 -> 5/3 : 1 월 (31 일)
  • 5/3 -> 4/14 : 십구일

그래서 당신이 사용하고있는 방법에 의존하는 것입니다.

간단히 말해서 date_diff은 여기에서 부러지지 않으며, 틀림없이 알고리즘도 마찬가지입니다. 날짜는 작동하는 데 펑키한 것들입니다.

관련 문제