我在Php编码中做错了什么?

时间:2015-01-24 05:11:05

标签: php arrays

如果生日形式为mm / dd / yyyy,请写一个函数返回该人的年龄,如果今天是该人的生日,则返回true或false。

例如,由于今天是2015年1月23日,您的函数将返回以下内容:

getBirthDate(' 02 /一千九百七十五分之二十六&#39); //返回数组('年龄' => 39,'生日' => false);

getBirthDate(&#39 01 /一千九百九十四分之二十三&#39); //返回数组('年龄' => 21,'生日' => 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'];




?>

3 个答案:

答案 0 :(得分:0)

这是我的版本,我改变了一些事情:

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)

答案 1 :(得分:0)

使用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()函数。

答案 2 :(得分:-1)

在您的代码中,更改

array_push($agenbirthday, array(
            "age" => $YDiff,
        "birthday" => $Birthday));

$agenbirthday = array(
            "age" => $YDiff,
        "birthday" => $Birthday);