Давайте попробуем что-то вроде этого.
function ConvertDate($date1, $date2, $format)
{
static $formatDefinitions = array(
'Y' => 31536000,
'M' => 2592000,
'W' => 604800,
'D' => 86400,
'H' => 3600,
'i' => 60,
's' => 1
);
$ts1 = strtotime($date1);
$ts2 = strtotime($date2);
$delta = abs($ts1 - $ts2);
$seconds = array();
foreach ($formatDefinitions as $definition => $divider) {
if (false !== strpos($format, $definition)) {
$seconds[$definition] = floor($delta / $divider);
$delta = $delta % $divider;
}
}
return strtr($format, $seconds);
}
Просто имейте в виду, что месяцы и годы являются только приблизительными, потому что вы не можете сказать, «сколько секунд - месяц» (потому что «месяц» может быть любым между 28 и 31 днем). Моя функция считает месяц как 30 дней.