Skip to content
Advertisement

Function to check user birth date is 18 years or upper not always work correctly

I am beginner webdeveloper. I use in my project Laravel 5.8. I have this this code:

if ($this->calcutateAge($request->input('date')) < 18) {
            return Redirect::back()->withErrors(['You are a minor. Registration is allowed for adult users']);
        }

function calcutateAge($dob)
    {

        $dob = date("Y-m-d", strtotime($dob));

        $dobObject = new DateTime($dob);
        $nowObject = new DateTime();

        $diff = $dobObject->diff($nowObject);

        return $diff->y;

    }

It’s work fine. But I have problem with date ex 2045-12-12. This function is not working. With year: 2015-12-12 – it’s okey.

How can I repair it?

Advertisement

Answer

I would write your function to return true or false depending on if the user is 18 or not.

function is_18($dob)
{
    $dobObject = new DateTime(date("Y-m-d", strtotime($dob)));
    $nowObject = new DateTime();
    
    return $dobObject < $nowObject ? ($dobObject->diff($nowObject)->y > 18) : false;
}

Then your IF block is simplified to this:

if (!$this->is_18($request->input('date')) {
     return Redirect::back()->withErrors(['You are a minor. Registration is allowed for adult users']);
}
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement