Расчет лет / месяцев / дней между датами - PullRequest
2 голосов
/ 15 марта 2011
$date1 = "2000-01-01";
$date2 = "2011-03-14";

$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365 * 60 * 60 * 24));
$months = ceil(($diff - ($years * 365 * 60 * 60 * 24)) / ((365 * 60 * 60 * 24) / 12));
$months2 = floor(($diff - ($years * 365 * 60 * 60 * 24)) / ((365 * 60 * 60 * 24) / 12));
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months2 * 30 * 60 * 60 * 24)/ (60 * 60 * 24));

Ответ, который я получаю, 11 years , 2 months and 14 days.Разве это не должно быть 11 years, 3 months and 14 days?

Я пробовал несколько разных способов, и у меня всегда получается 2 месяца вместо 3. Кто-нибудь знает почему?

Ответы [ 2 ]

8 голосов
/ 15 марта 2011

Попробуйте использовать встроенный в PHP API даты вместо математики самостоятельно.

Использование DateTime , DateInterval и DateTime :: diff :

$date1 = new DateTime("2000-01-01");
$date2 = new DateTime("2011-03-14");
$diff = $date2->diff($date1);
var_dump($diff);'
/* is prints: 
object(DateInterval)#3 (8) {
  ["y"]=>
  int(11)
  ["m"]=>
  int(2)
  ["d"]=>
  int(13)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["invert"]=>
  int(1)
  ["days"]=>
  int(4090)
}
*/

По крайней мере, тогда вам не нужно беспокоиться, если вы допустили ошибку (результат кажется правильным).

3 голосов
/ 15 марта 2011

Ответ, который вы получаете, совершенно правильный!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...