给定一个 mm/dd/yyyy 形式的出生日期,编写一个函数,如果今天是这个人的生日,则返回这个人的年龄和真假。
例如,由于今天是 2015 年 1 月 23 日,您的函数将返回以下内容:
getBirthDate('02/26/1975');//返回 array('age' => 39, 'birthday' => false);
getBirthDate('01/23/1994');//返回 array('age' => 21, 'birthday' => true);
这就是我所拥有的,我似乎无法找出为什么输出不会像我需要的那样出来。当我运行此代码时,没有显示任何输出,但我无法弄清楚我做错了什么。我希望它做的是,当它运行时,它应该输出年龄和真假,如果该日期是人的生日。但是每当我运行这段代码时,输出总是空白的,或者它只是说 Array。我将不胜感激任何解决此问题的帮助或建议!谢谢!
<?php
function getBirthDate($birthdate)
{
$agebirthday = array();
list($D, $M, $Y) = explode("/", $birthdate);
$YearDifference = date("y") - $Y;
if (date("m") == $M && (date("d") == $D))
{
$Birthday = true;
}
else {
$Birthday = false;
}
array_push($agebirthday, array(
"age" => $YearDifference,
"birthday" => $Birthday));
return $agebirthday;
}
$output = getBirthDate($birthdate);
echo $output['age'];
echo $output['birthday'];
?>
这是我的版本,我更改了一些内容:
function getBirthDate($birthdate)
{
list($D, $M, $Y) = explode('/', $birthdate);
$YDiff = date('Y') - $Y;
// the line below is optional, you may wish to count complete years age or not
if(date("md") < $M.$D) $YDiff --; // if it's BEFORE birthday
return [
"age" => $YDiff,
"birthday" => date('md') == $M.$D
];
}
$output = getBirthDate('28/05/1981');
var_dump($output['age']);
var_dump($output['birthday']);
给我正确的答案,我的生日:
int(33)
bool(false)
利用 strtotime() 函数。它将日期转换为一个大整数,表示 1970 年和您指定的日期之间经过的秒数,然后从 time() 函数的值中减去该值以获得时差的秒数。然后在结果上使用除法来获得所需的数字。
例如:
$seconds_old=time()-strtotime("02/26/1975");
然后你可以这样做:
$minutes_old=$seconds_old / 60;
$hours_old=$minutes_old / 60;
$days_old=$hours_old / 24;
$years_old=$days_old / 365;
如果精度太高,则研究 intval() 函数。
在你的
代码中,改变
array_push($agenbirthday, array(
"age" => $YDiff,
"birthday" => $Birthday));
自
$agenbirthday = array(
"age" => $YDiff,
"birthday" => $Birthday);