Расчет возрастной группы с заданной даты рождения - PullRequest
0 голосов
/ 30 августа 2018

В приложении у меня было поле выбора, которое выглядело так:

<select name="AgeGroup" class="form-control" id="AgeGroup">
    <option value="18-24" selected=""18-24</option>
    <option value="18-24">18-24 years</option>
    <option value="25-34">25-34 years</option>
    <option value="35-44">35-44 years</option>
    <option value="45-54">45-54 years</option>
    <option value="55-64">55-64 years</option>
    <option value="65 Plus">65 years or over</option>
    <option value="PTNA">Prefer not to answer</option>
</select>

В дополнение к этому я также спрашиваю дату рождения пользователя, но было бы глупо спрашивать пользователя о них обоих, так как вы наверняка могли бы определить данную возрастную группу с указанной даты рождения?

Поскольку я собираю дату рождения, у меня есть простой мутатор для получения возраста пользователя в годах, который выглядит следующим образом:

/**
 * Calculate the user's age in years given their date of birth
 *
 * @return void
 */
public function getAgeAttribute()
{
    $this->birth_date->diff(Carbon::now())->format('Y');
}

Затем я понял, что мне даже не нужно указывать возраст, чтобы определить возрастную группу, поэтому я сделал еще один метод доступа, подобный этому:

/**
 * Infer the users age group given their date of birth 
 *
 * @return void
 */
public function getAgeGroupAttribute()
{
    $age = $this->birth_date->diff(Carbon::now())->format('Y');

    switch($age){
        case($age <= 24);
            return "18 - 24";
        break;
        case ($age <= 34);
            return "25 - 34";
        break;
        case ($age <= 44);
            return "35 - 44";
        break;
        case ($age <= 54);
            return "45 - 54";
        break;
        case ($age <= 64);
            return "55 - 64";
        break;
        case ($age > 64);
            return "Over 65";
        break;
        default:
            return "Unspecified age group";
    }
}

Но меня беспокоит, что, если они на самом деле не выбрали возраст? Поскольку эта форма поставляется с опцией предпочитать не говорить.

Могу ли я просто проверить, что это на самом деле дата, прежде чем я $user->age_group?

Кроме того, я полагаю, что в первом случае переключателя должно быть или потому что вы можете быть моложе 18 лет.

Как это: case($age >= 18 && $age <= 24);

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете просто сохранить , предпочитая не отвечать как значение null для даты их рождения. Затем, когда дело доходит до проверки возрастной группы пользователя, вы можете проверить значение null и вернуть свой , предпочитая не отвечать или неопределенный в вашем методе доступа:

public function getAgeGroupAttribute()
{
    if ($this->birth_date === null) {
        return 'Unspecified';
    }

    $age = $this->birth_date->diff(Carbon::now())->format('Y');

    // ...
}
0 голосов
/ 30 августа 2018

Вы также можете поставить значение 0 вместо PTNA

 <option value="0">Prefer not to answer</option>

и используйте ваш коммутатор с чехлом

case($age >= 18 && $age <= 24);

Я бы также изменил сообщение по умолчанию в этой ситуации только из соображений согласованности, но это поможет.

Конечно, более надежный способ проверить, какое значение вы получаете, если это не возраст, даже не поместить его в регистр переключателя и перенаправить его на оператор else, но вышеприведенное решение просто и быстро просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...