Найти разницу в месяц в php? - PullRequest
11 голосов
/ 21 апреля 2010

Есть ли способ найти разницу в месяце в PHP? У меня есть данные от 2003-10-17 и 2004-03-24. Мне нужно выяснить, сколько месяцев осталось в течение этих двух дней. Скажем, если 6 месяцев, мне нужен выход только в месяцах. Спасибо, что направил меня на разницу в день.

Я нахожу решение через MySQL, но оно мне нужно на PHP. Кто-нибудь, помогите мне, спасибо заранее.

Ответы [ 13 ]

0 голосов
/ 11 января 2012
function monthsDif($start, $end)
{
    // Assume YYYY-mm-dd - as is common MYSQL format
    $splitStart = explode('-', $start);
    $splitEnd = explode('-', $end);

    if (is_array($splitStart) && is_array($splitEnd)) {
        $startYear = $splitStart[0];
        $startMonth = $splitStart[1];
        $endYear = $splitEnd[0];
        $endMonth = $splitEnd[1];

        $difYears = $endYear - $startYear;
        $difMonth = $endMonth - $startMonth;

        if (0 == $difYears && 0 == $difMonth) { // month and year are same
            return 0;
        }
        else if (0 == $difYears && $difMonth > 0) { // same year, dif months
            return $difMonth;
        }
        else if (1 == $difYears) {
            $startToEnd = 13 - $startMonth; // months remaining in start year(13 to include final month
            return ($startToEnd + $endMonth); // above + end month date
        }
        else if ($difYears > 1) {
            $startToEnd = 13 - $startMonth; // months remaining in start year 
            $yearsRemaing = $difYears - 2;  // minus the years of the start and the end year
            $remainingMonths = 12 * $yearsRemaing; // tally up remaining months
            $totalMonths = $startToEnd + $remainingMonths + $endMonth; // Monthsleft + full years in between + months of last year
            return $totalMonths;
        }
    }
    else {
        return false;
    }
}
0 голосов
/ 21 апреля 2010
<?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;

?>

Ссылка: http://au.php.net/manual/en/function.mktime.php#86916

0 голосов
/ 21 апреля 2010

Вот быстрый:

$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);
...