Добро пожаловать в stackoverflow: -)
PHP имеет собственный класс DateTime , который позволяет выполнять манипуляции с датой и форматирование даты.
В ваших настройках c на тот случай, если вы можете начать преобразовывать две даты в объекты, а затем переформатировать в ожидаемый формат.
Вот пример:
$date = DateTime::createFromFormat('d/m/Y', $startString);
С Имея это в виду, теперь мы можем создать функцию, которая будет проверять ваши требования и возвращать строку в вашем пользовательском формате.
function my_date_range(DateTime $start, DateTime $end)
{
$sameYear = $start->format('Y') === $end->format('Y');
$sameMonth = $sameYear && $start->format('m') === $end->format('m');
$sameDay = $sameMonth && $start->format('d') === $end->format('d');
if ($sameDay) {
return $start->format('d M Y');
}
if ($sameMonth) {
return sprintf('%s to %s', $start->format('d'), $end->format('d M Y'));
}
if ($sameYear) {
return sprintf('%s to %s', $start->format('d M'), $end->format('d M Y'));
}
return sprintf("%s to %s", $start->format('d M Y'), $end->format('d M Y'));
}
Ниже вы найдете мои примеры дат и использования:
var_dump(
my_date_range(DateTime::createFromFormat('d/m/Y', '11/2/2020'), DateTime::createFromFormat('d/m/Y', '26/2/2020')),
my_date_range(DateTime::createFromFormat('d/m/Y', '26/2/2020'), DateTime::createFromFormat('d/m/Y', '5/3/2020')),
my_date_range(DateTime::createFromFormat('d/m/Y', '29/12/2020'), DateTime::createFromFormat('d/m/Y', '2/1/2021')),
my_date_range(DateTime::createFromFormat('d/m/Y', '2/1/2021'), DateTime::createFromFormat('d/m/Y', '2/1/2021')),
)
Результат:
string(17) "11 to 26 Feb 2020"
string(21) "26 Feb to 05 Mar 2020"
string(26) "29 Dec 2020 to 02 Jan 2021"
string(11) "02 Jan 2021"