Месяцы от 2 unixtimestamps - PullRequest
       14

Месяцы от 2 unixtimestamps

0 голосов
/ 31 января 2012

У меня есть 2 метки времени от 2 дат: 01/2012 и 02/2013.Разница между этими временными метками составляет 31795200. Я использовал функцию:

function unixTimeStampInMonths($timestamp){
    $elapsed_minutes = ($timestamp / 60);
    $elapsed_hours = ($elapsed_minutes / 60);
    $elapsed_days = ($elapsed_hours / 24);
    $elapsed_months = floor($elapsed_days / 30);
    return $elapsed_months;
}

Но есть проблема, месяцы округляются до 30 дней.Как лучше всего рассчитать разницу по месяцам между ними?

LE:

Решение, предложенное другом:

// arguments format: 05/2010
function monthDifferenceBetween2Dates($first, $second){
    $expl1 = explode('/', $first);
    $expl2 = explode('/', $second);

    $months_in_years = ($expl2[1] - $expl1[1] - 1) * 12;
    $first_months = 12 - $expl1[0];
    $second_months = $expl2[0];

    return $months_in_years + $first_months + $second_months;
}

iЯ буду использовать это.спасибо @ nickb

1 Ответ

2 голосов
/ 31 января 2012

Используйте PHP DateTime класс вместо отметок времени UNIX:

$start = DateTime::createFromFormat( 'm/d/Y', '01/01/2012');
$end = DateTime::createFromFormat( 'm/d/Y', '02/01/2013');

$diff = $start->diff( $end);
var_dump( $diff);

Будет выводить:

object(DateInterval)#3 (8) {
  ["y"]=>
  int(1)
  ["m"]=>
  int(1)
  ["d"]=>
  int(0)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  int(397)
}

Итак, для расчета общего количества месяцев мы можем сделать:

$months = $diff->y * 12 + $diff->m;

Который напечатает 13. Демо

...