欢迎来到 stackoverflow :-)
PHP 有一个原生的DateTime 类,它允许您执行日期操作和日期格式设置。
在您的具体情况下,您可以开始将两个日期转换为对象,然后将 reformat 转换为您预期的格式。
这是一个例子:
$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"