2010-08-13 8 views
3

임의의 두 날짜 사이의 월 금액을 계산하는 방법은 무엇입니까? 한 달에 한 달이 떨어지더라도 완전한 한 달로 간주됩니다.날짜 사이의 월 금액 계산

예 :

  • 2010-01-01 - 2010-03-31 = 삼개월
  • 2010-06-15 - 2010-09-01
  • = 사개월

기타 등등. 나는 시간 소인의 차이를 2592000 (한 달에 평균 초 수)으로 나누는 것을 생각했지만 해커처럼 보이고 오류가 발생하기 쉽습니다. 그리고 가능한 빨리 (수천 번 빠르게 실행해야합니다) 계속하고 싶습니다. 따라서 strtotime을 사용하는 것이 최적이 아닌 것 같습니까?

답변

7

질문을 올바르게 읽는 경우 1 월 31 일과 2 월 1 일에 걸쳐 1 월과 2 월에 걸쳐 1 일 간격으로 있기 때문에 "2"를 반환하고 싶을 것입니다.

당신은 (psuedocode) 해결할 수 :

monthno1 = (date1_year * 12) + date1_month; 
monthno2 = (date2_year * 12) + date2_month; 

return (monthno2 - monthno1) + 1; 

이 두 번째 날짜가 나중에 가정합니다.

+1

그래를이 제대로 그것을 할 것, 감사합니다! –

+0

예. 고맙습니다. –

1

날짜가 알려진 형식으로되어 가정 :

function getMonths($start, $end) { 
    $startParsed = date_parse_from_format('Y-m-d', $start); 
    $startMonth = $startParsed['month']; 
    $startYear = $startParsed['year']; 

    $endParsed = date_parse_from_format('Y-m-d', $end); 
    $endMonth = $endParsed['month']; 
    $endYear = $endParsed['year']; 

    return ($endYear - $startYear) * 12 + ($endMonth - $startMonth) + 1; 
} 

이 제공 :

print(getMonths('2010-01-01', '2010-03-31')); // 3 
print(getMonths('2010-06-15', '2010-09-01')); // 4