0

我的任务是能够以某人的生日作为论据,并以这种特定方式返回年龄以及是否生日

getBirthDate('09/06/1992'); // returns array('age' => 21, 'birthday' => true);

我无法让布尔值正常工作,因为它总是正确返回年龄,但无论日期是否正确,总是将“生日”返回为 false。

<?php
function getBirthDate($birthdate) {
    $today =getdate();
    $day =array($today["mon"], $today["mday"]);
    $newBday = str_replace("/",",",$birthdate);
    $birthDate = explode(",",$newBday);
    $monthDay = array($birthDate["0"],$birthDate[1]);
    $compared = array_diff($day,$monthDay);

    if ($compared === "") {
        $age = ($today["year"]-$birthDate["2"]);

        $dateArray = array( "age" => "$age", "birthday" => "True");
        return print_r ($dateArray);        
    }
    else {
        if ($monthDay[0] < $day[0]) {
            $age = (($today["year"]-$birthDate["2"])-1);
            $dateArray = array( "age" => "$age", "birthday" => "Fals");
            return print_r($dateArray); 
        }
        else {
            $age = (($today["year"]-$birthDate["2"]));
            $dateArray = array( "age" => "$age", "birthday" => "False");
            return print_r($dateArray); 
        }
    }
}
?>
4

3 回答 3

1

为什么不完全更改您的代码?

function getBirthDate($birthdate) {
    return array(
       'age'=>intval(substr(date('Ymd') - date('Ymd', strtotime($birthdate)), 0, -4)),
       'birthday'=>(date('md') === date('md', strtotime($birthdate)))
    );
}

我不知道您服务器的区域设置(dmY 或 mdY),但对于可移植代码,您应该按 ISO 顺序(Ymd)给出 $birthdate。

于 2013-09-15T21:53:29.220 回答
0

问题是array_diff总是返回一个数组。所以$compared === ""总是失败。当您使用count($compared) === 0or时empty($compared),它会起作用。

另外,如果我可以建议另一个编辑。我会将这些结果保存在变量中,并在函数末尾创建结果数组。这样,当您以后想要更改结果的呈现方式时,您只需要编辑代码的一部分而不是三部分。

if (empty($compared)) {
    $age = ($today["year"]-$birthDate["2"]);
    $birthday = "true";        
}
else {
    if ($monthDay[0] < $day[0]) {
        $age = (($today["year"]-$birthDate["2"])-1);
        $birthday = "false";
    }
    else {
        $age = (($today["year"]-$birthDate["2"]));
        $birthday = "false";
    }
}
$result = array("age" => $age, "birthday" => $birthday);
return $result;
于 2013-09-15T21:47:09.703 回答
0

这是因为您的比较array_diff不正确。您正在尝试将数组与字符串进行比较。如果您想检查一个数组是否没有值,最好的做法是以下方法之一。

count($compared) === 0

或者

empty($compared)
于 2013-09-15T21:48:04.997 回答