计算起始日期的年份

2022-08-30 23:57:04

我正在寻找一个函数,该函数以格式从日期开始计算年份:0000-00-00。找到此功能,但它不起作用。

// Calculate the age from a given birth date
// Example: GetAge("1986-06-18");
function getAge($Birthdate)
{
  // Explode the date into meaningful variables
  list($BirthYear,$BirthMonth,$BirthDay) = explode("-", $Birthdate);
  // Find the differences
  $YearDiff = date("Y") - $BirthYear;
  $MonthDiff = date("m") - $BirthMonth;
  $DayDiff = date("d") - $BirthDay;
  // If the birthday has not occured this year
  if ($DayDiff < 0 || $MonthDiff < 0)
  $YearDiff--;
 }

echo getAge('1990-04-04');

输出什么都没有:/
我有错误报告,但我没有得到任何错误


答案 1

您的代码不起作用,因为该函数未返回要打印的任何内容。

就算法而言,怎么样:

function getAge($then) {
    $then_ts = strtotime($then);
    $then_year = date('Y', $then_ts);
    $age = date('Y') - $then_year;
    if(strtotime('+' . $age . ' years', $then_ts) > time()) $age--;
    return $age;
}
print getAge('1990-04-04'); // 19
print getAge('1990-08-04'); // 18, birthday hasn't happened yet

这与这个问题中接受的答案是相同的算法(仅在PHP)。

一种更短的方法:

function getAge($then) {
    $then = date('Ymd', strtotime($then));
    $diff = date('Ymd') - $then;
    return substr($diff, 0, -4);
}

答案 2

另一种方法是使用PHP的DateTime类,该类是PHP 5.2中的新类:

$birthdate = new DateTime("1986-06-18");
$today     = new DateTime();
$interval  = $today->diff($birthdate);
echo $interval->format('%y years');

查看实际应用


推荐