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) はわかりませんが、移植可能なコードの場合は、$birthdate を ISO オーダー (Ymd) で指定する必要があります。

于 2013-09-15T21:53:29.220 に答える
0

問題は、array_diff常に配列を返すことです。だから$compared === ""いつも失敗する。count($compared) === 0またはempty($compared)代わりに使用すると、機能します。

また、別の編集を提案する場合もあります。これらの結果を変数に保存し、関数の最後に結果配列を作成します。このように、後で結果の表示方法を変更したい場合、コードの 3 つではなく 1 つの部分を編集するだけで済みます。

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 に答える