Bir birim sınama tüm koyarak çözümler ton test ettikten sonra, bu ben çıkıp budur:
/**
* Calculate the difference in months between two dates (v1 / 18.11.2013)
*
* @param \DateTime $date1
* @param \DateTime $date2
* @return int
*/
public static function diffInMonths(\DateTime $date1, \DateTime $date2)
{
$diff = $date1->diff($date2);
$months = $diff->y * 12 + $diff->m + $diff->d / 30;
return (int) round($months);
}
Örneğin bu (birim testi test durumları) dönecektir:
- 2013/11/01 - 30.11.2013 - 1 ay
- 01.01.2013 - 31.12.2013 - 12 ay
- 31.01.2011 - 28.02.2011 - 1 ay
- 01.09.2009 - 01.05.2010 - 8 ay
- 01.01.2013 - 31.03.2013 - 3 ay
- 15.02.2013 - 15.04.2013 - 2 ay
- 01.02.1985 - 31.12.2013 - 347 ay
Uyarı: Çünkü bu, bazı durumlarda bunu kullanmak durumunda soruna yol açabilir bir ay bile yarım yuvarlanır gün, ile yok yuvarlama. Bu yüzden bu tür durumlar için bunu kullanmıyorum, bu size sorunlar yaşatabilir.
Örneğin:
- 2013/11/02 - 31.12.2013 değildir 1 (beklendiği gibi), 2 dönecektir.