php 年龄计算闰年问题
Age calculation leap year issue in php
我正在使用以下函数从给定的出生日期计算年龄,但如果使用闰年,即 29,它不会显示正确的差异。请帮助我修复此代码。
<?php
function getAbsAge($birthday)
{
list($year,$month,$day) = explode("-", $birthday);
$year_diff = date("Y") - $year;
$month_diff = date("m") - $month;
$day_diff = date("d") - $day;
if ($day_diff < 0 || $month_diff < 0)
{
$year_diff--;
}
if ($year_diff == 0)
{
$interval = date_diff(date_create(), date_create($birthday));
$months = $interval->format("%M");
$days = $interval->format("%d");
if ($months > 0)
{
return $interval->format("%M Months %d Days");
}
else if ($months == 0 && $days > 1)
{
return $interval->format("%d Days");
}
else
{
return $interval->format("%d Day");
}
}
else if ($year_diff == 1)
{
return "$year_diff Year";
}
else if ($year_diff > 1)
{
return "$year_diff Years";
}
}
echo getAbsAge("2012-02-29")
?>
此外,如果有人可以提出更好的代码,请更新它。
如果一个人不到 1 岁,我需要以月和日为单位查找出生日期。
我的服务器上有最新的 5.4 php 版本。
对于 2012-02-29,返回 2 年,而应为 3 年。请帮忙
你为什么不一直使用 date_diff()
功能?它会给你想要的结果:
function getAbsAge($birthday) {
$age = '';
$diff = date_diff(date_create(), date_create($birthday));
$years = $diff->format("%y");
$months = $diff->format("%m");
$days = $diff->format("%d");
if ($years) {
$age = ($years < 2) ? '1 Year' : "$years Years";
} else {
$age = '';
if ($months) $age .= ($months < 2) ? '1 Month ' : "$months Months ";
if ($days) $age .= ($days < 2) ? '1 Day' : "$months Days";
}
return trim($age);
}
另一种方法是计算时差(以秒为单位)并从那里获取:
list($year,$month,$day) = explode("-", $birthday);
$diff = mktime(0,0,0,date('n'),date('j'),date('Y')) - mktime(0,0,0,$month,$day,$year);
那么一天由 24 小时组成,每个小时 60 分钟,每个小时 60 秒:
$sday = 60 * 60 * 24;
然后计算年差为:
$years = floor($diff / (365.2425 * $sday));
但我会坚持使用我向您展示的第一个版本 date_diff()
我正在使用以下函数从给定的出生日期计算年龄,但如果使用闰年,即 29,它不会显示正确的差异。请帮助我修复此代码。
<?php
function getAbsAge($birthday)
{
list($year,$month,$day) = explode("-", $birthday);
$year_diff = date("Y") - $year;
$month_diff = date("m") - $month;
$day_diff = date("d") - $day;
if ($day_diff < 0 || $month_diff < 0)
{
$year_diff--;
}
if ($year_diff == 0)
{
$interval = date_diff(date_create(), date_create($birthday));
$months = $interval->format("%M");
$days = $interval->format("%d");
if ($months > 0)
{
return $interval->format("%M Months %d Days");
}
else if ($months == 0 && $days > 1)
{
return $interval->format("%d Days");
}
else
{
return $interval->format("%d Day");
}
}
else if ($year_diff == 1)
{
return "$year_diff Year";
}
else if ($year_diff > 1)
{
return "$year_diff Years";
}
}
echo getAbsAge("2012-02-29")
?>
此外,如果有人可以提出更好的代码,请更新它。
如果一个人不到 1 岁,我需要以月和日为单位查找出生日期。
我的服务器上有最新的 5.4 php 版本。
对于 2012-02-29,返回 2 年,而应为 3 年。请帮忙
你为什么不一直使用 date_diff()
功能?它会给你想要的结果:
function getAbsAge($birthday) {
$age = '';
$diff = date_diff(date_create(), date_create($birthday));
$years = $diff->format("%y");
$months = $diff->format("%m");
$days = $diff->format("%d");
if ($years) {
$age = ($years < 2) ? '1 Year' : "$years Years";
} else {
$age = '';
if ($months) $age .= ($months < 2) ? '1 Month ' : "$months Months ";
if ($days) $age .= ($days < 2) ? '1 Day' : "$months Days";
}
return trim($age);
}
另一种方法是计算时差(以秒为单位)并从那里获取:
list($year,$month,$day) = explode("-", $birthday);
$diff = mktime(0,0,0,date('n'),date('j'),date('Y')) - mktime(0,0,0,$month,$day,$year);
那么一天由 24 小时组成,每个小时 60 分钟,每个小时 60 秒:
$sday = 60 * 60 * 24;
然后计算年差为:
$years = floor($diff / (365.2425 * $sday));
但我会坚持使用我向您展示的第一个版本 date_diff()