Ayda php farkı bulun?

6 Cevap php

PHP aylık farkı bulmak için herhangi bir yolu var mı? Ben gelen güncel 2003-10-17 ve güncel 2004-03-24 bir girişi var. Ben bu iki gün içinde orada kaç ay bulmalıyız. 6 ay, ben sadece ayda çıktı ihtiyacınız varsa söyleyin. Gün farkı için bana rehberlik için teşekkür ederiz.

MySQL ile çözüm bulmak ama ben PHP lazım. Herkes, önceden teşekkürler bana yardım et.

6 Cevap

Burada hızlı bir bulunuyor:

$date1 = mktime(0,0,0,10,0,2003); // m d y, use 0 for day
$date2 = mktime(0,0,0,3,0,2004); // m d y, use 0 for day

echo round(($date2-$date1) / 60 / 60 / 24 / 30);

Tekerleği yeniden icat etmeden en kolay yolu. Bu size full ay farkı vereceğiz. Yani Aşağıda iki tarih almost 76 ay arayla, ama sonuç 75 aydır.

date_default_timezone_set('Asia/Tokyo');  // you are required to set a timezone

$date1 = new DateTime('2009-08-12');
$date2 = new DateTime('2003-04-14');

$diff = $date1->diff($date2);

echo (($diff->format('%y') * 12) + $diff->format('%m')) . " full months difference";

Vay, yolu Nasıl bu sürümü hakkında ... sorunu overthink için:

function monthsBetween($startDate, $endDate) {
    $retval = "";

    // Assume YYYY-mm-dd - as is common MYSQL format
    $splitStart = explode('-', $startDate);
    $splitEnd = explode('-', $endDate);

    if (is_array($splitStart) && is_array($splitEnd)) {
        $difYears = $splitEnd[0] - $splitStart[0];
        $difMonths = $splitEnd[1] - $splitStart[1];
        $difDays = $splitEnd[2] - $splitStart[2];

        $retval = ($difDays > 0) ? $difMonths : $difMonths - 1;
        $retval += $difYears * 12;
    }
    return $retval;
}

NB: birçok ortak barındıran henüz yok, çünkü diğer çözümlerin birkaç aksine, bu, PHP 5.3 'te eklenen tarih fonksiyonları bağlı değildir.

http://www.php.net/manual/en/datetime.diff.php

Bu biçim bir yöntem olan DateInterval nesnesi döndürür.

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.
<?php
  # end date is 2008 Oct. 11 00:00:00
  $_endDate = mktime(0,0,0,11,10,2008);
  # begin date is 2007 May 31 13:26:26
  $_beginDate = mktime(13,26,26,05,31,2007);

  $timestamp_diff= $_endDate-$_beginDate +1 ;
  # how many days between those two date
  $days_diff = $timestamp_diff/2635200;

?>

Referans: http://au.php.net/manual/en/function.mktime.php#86916