我在这个 PHP 编码中做错了什么


What am I doing wrong in this Php coding?

给定一个 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);