Вычислить месяцы из двух дат

Мне нужно рассчитать месяцы из двух дат

Например :

Если date1 = '2014-08-20' означает 20 августа 2014 г.

& date2 = '2014-09-17' означает сегодняшнюю дату

тогда мне нужна разница months = 2 (Aug + September)

Так же

     If `date1 = '2014-03-15'` means 15th March 2014

     &  `date2 =  '2014-09-17'`  means today date

тогда мне нужна разница months = 7 (March + April + May + June + July + Aug + SEPT)

Как я могу сделать с функциями даты php?


person Sandip Patel    schedule 17.09.2014    source источник
comment
Пожалуйста, проверьте, может быть дубликат: - stackoverflow.com/questions/13416894/   -  person Khushboo    schedule 17.09.2014
comment
возможный дубликат Как рассчитать разницу между двумя датами, используя PHP?   -  person ClmentM    schedule 17.09.2014


Ответы (5)


Это то, что вы ищете?

$date1 = new DateTime('2014-08-20');
$date2 = new DateTime('2014-09-17');

echo  $date2->format('n') - $date1->format('n') + 1;
person Casimir et Hippolyte    schedule 17.09.2014

Если вы хотите учитывать каждый прошедший месяц, вы можете попробовать следующее:

$date1 = new DateTime('2014-03-15');
$date2 = new DateTime();
$date2->modify('last day of this month'); // adjust it to take into account
$int = new DateInterval('P1M'); // every month
$count = 0;
$range = new DatePeriod($date1, $int, $date2);
foreach($range as $d) {
    ++$count; // for each month incremenent
}
echo $count;
person Kevin    schedule 17.09.2014
comment
@SandipPatel очень рад, что это помогло, на самом деле ответ Казимира тоже хорош - person Kevin; 17.09.2014
comment
да Казимир и Ипполит дали очень короткий ответ, поэтому он будет полезен мне и другим. Еще раз спасибо за ваш ответ. - person Sandip Patel; 17.09.2014
comment
конечно @SandipPatel рад, что смог помочь - person Kevin; 17.09.2014

Вы можете сделать это следующим образом.

Рассмотрим этот пример:

<?php
$start    = new DateTime('2011-12-02');
$start->modify('first day of this month');
$end      = new DateTime('2012-05-06');
$end->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
    $monthNum=$dt->format("m");
    echo $dt->format("Y").date('F', mktime(0, 0, 0, $monthNum, 10)). PHP_EOL;
}

Посмотреть в действии здесь

Ссылка: Как перечислить все месяцы между двумя датами

person OshoParth    schedule 17.09.2014

Вы можете сделать с:

$first_date = '2014-03-15';
$second_date = '2014-09-17';

$date1 = strtotime($first_date);
$date2 = strtotime($second_date);

$year1 = date('Y', $date1);
$year2 = date('Y', $date2);

$month1 = date('m', $date1);
$month2 = date('m', $date2);

$diff = (($year2 - $year1) * 12) + ($month2 - $month1);

Но чтобы также посчитать разницу в днях, мы можем сделать следующее:

$date_interval = $first_date->diff($second_date);
        echo "difference " . $date_interval->y . " years, " . $date_interval->m." months, ".$date_interval->d." days "; 

Проверьте эту ссылку link< /а>

person Mobasher Fasihy    schedule 17.09.2014
comment
это дает мне 6 месяцев; Но мне нужно, как я уже сказал, месяцев = 7 - person Sandip Patel; 17.09.2014
comment
поэтому для этого он также должен учитывать разницу в днях? Да. - person Mobasher Fasihy; 17.09.2014

person    schedule
comment
это дает мне 0 месяцев; Но мне нужно, как я уже сказал, месяцев = 2 - person Sandip Patel; 17.09.2014