PHP Функция date_diff возвращает неверный результат - PullRequest
2 голосов
/ 26 февраля 2020

Я пытался найти количество месяцев между двумя датами, используя date_diff() в PHP. Как все мы знаем, число месяцев между 2019-03-01 и 2020-01-31 составляет 11 месяцев, но следующий код возвращает 10 месяцев.

$date1=date_create("2019-03-01");
$date2=date_create("2020-01-31");
$diff=date_diff($date1,$date2);
echo $diff->format("%m months");

Выход

10 months

Почему этот код возвращает на 1 месяц меньше?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Если вам нужна разница в месяцах от начала первого дня до конца последнего дня в полночь, вы также можете установить дату окончания в полночь (24 часа!) Или добавить день.

<?php
$dateStart = date_create("2019-03-01");
$dateEnd = date_create("2020-01-31");

//set Time to midnight or add a day
$dateEnd->setTime(24,0,0);

$diff = date_diff($dateStart,$dateEnd);
echo $diff->format("%m months");
//11 months

попробуй сам.

2 голосов
/ 26 февраля 2020

Разница составляет 10 месяцев и 30 дней. Вот что возвращает date_diff():

object(DateInterval)#3 (16) {
  ["y"]=>
  int(0)
  ["m"]=>
  int(10)
  ["d"]=>
  int(30)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["f"]=>
  float(0)
  ["weekday"]=>
  int(0)
  ["weekday_behavior"]=>
  int(0)
  ["first_last_day_of"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  int(336)
  ["special_type"]=>
  int(0)
  ["special_amount"]=>
  int(0)
  ["have_weekday_relative"]=>
  int(0)
  ["have_special_relative"]=>
  int(0)
}

ETA, как @showdev прокомментировал выше.

...