Как рассчитать возраст, используя углерод в функции карты массива?

Это приложение построено в Lavavel 5. У меня была таблица со значением года рождения. Я запрашиваю таблицу, используя этот запрос:

  $tarikh = DB::table('itemregistrations')
            ->select('itemregistrations.lahir_dd', 'itemregistrations.lahir_mm', 'itemregistrations.lahir_yy')
            ->get();

дд($тарих); произвести этот вывод:

Collection {#709 ▼
#items: array:1123 [▼
0 => {#681 ▼
  +"lahir_dd": 9
  +"lahir_mm": "June"
  +"lahir_yy": 1979
}
1 => {#670 ▶}
2 => {#680 ▶}
3 => {#713 ▶}

Я хочу рассчитать возраст с помощью углерода и вставить в коллекцию с помощью карты массива (мой предыдущий код):

 $tarikh->map(function ($detail) {$detail->Umur = "{$detail->lahir_yy}->diffInYears(\Carbon::now())";
        return $detail;
    });

Изменен на предложенный Ijas код:

  $tarikh->map(function ($detail) {
     $detail->Umur = \Carbon\Carbon::parse($detail->lahir_yy)->diffInYears();
     return $detail;
 });

person joun    schedule 20.12.2018    source источник
comment
что ->lahir_yy ?   -  person Ijas Ameenudeen    schedule 20.12.2018
comment
значение года рождения... в целочисленном типе   -  person joun    schedule 20.12.2018
comment
это связанная проблема? stackoverflow.com/questions/45649128 /   -  person joun    schedule 21.12.2018
comment
Я так не думаю. Вы передаете поле, а не имя поля. Это верный путь. Когда вы dd($detail->lahir_yy) что вы получаете? год точно?   -  person Ijas Ameenudeen    schedule 21.12.2018
comment
показывает 1979 год... $tarikh-›map(function ($detail) { // $detail-›Umur = {$detail-›t_lahir}-›diff(\Carbon::now()-›year); $ detail-›Umur = Carbon::parse({$detail-›lahir_yy})-›diffInYears(); dd($detail-›lahir_yy); return $detail; });   -  person joun    schedule 21.12.2018


Ответы (1)


Вы можете рассчитать разницу как,

$tarikh->map(function ($detail) {
    $detail->Umur = \Carbon\Carbon::parse($detail->lahir_yy)->diffInYears();
    return $detail;
});

Обновлено: повторно сгенерированы ваши результаты и применено данное решение.

Скрипт: https://implode.io/i1GanD

Для данного контекста это работает так, как вы ожидали.

Ошибка устранена путем изменения некоторого кода следующим образом:

  $tarikh->map(function ($detail) {

        $detail->Umur = \Carbon\Carbon::createFromFormat('Y',$detail->lahir_yy)->diffInYears(); 

        return $detail;
    });   
person Ijas Ameenudeen    schedule 20.12.2018
comment
почему возникает ошибка DateTime::__construct(): не удалось проанализировать строку времени (0) в позиции 0 (0): непредвиденный символ... нужно ли внести какие-либо изменения? - person joun; 20.12.2018
comment
год рождения в целом..нужно изменить тип? - person joun; 20.12.2018
comment
Нет. Вы можете проверить скрипку. Целое нормально. - person Ijas Ameenudeen; 20.12.2018
comment
Я внес изменения в вопрос ... это из-за расположения массива? - person joun; 21.12.2018
comment
Обновил ответ. Это работает для данного контекста. Может быть, у игрушки искаженные данные? Точно сказать не могу. - person Ijas Ameenudeen; 21.12.2018
comment
та же ошибка все еще появляется... DateTime::__construct(): не удалось проанализировать строку времени (0) в позиции 0 (0): непредвиденный символ - person joun; 21.12.2018
comment
он выделяет этот код в ошибке .. parent::__construct($time, $timezone); если (isset($locale)) { setlocale(LC_NUMERIC, $locale); - person joun; 21.12.2018
comment
Вам не кажется, что это вырвано из контекста? Вы можете задать отдельный вопрос. - person Ijas Ameenudeen; 21.12.2018
comment
хорошо .. спасибо ... я разверну этот вопрос в отдельный вопрос .. я приму ваш ответ, поскольку он доказан на скрипке .. спасибо за ваш вклад и время Ijas - person joun; 21.12.2018
comment
Привет, Иджас... Я изменил код, используя \Carbon\Carbon::createFromFormat('Y',$detail-›lahir_yy) стереть ошибку.. спасибо за вашу помощь.. я обновил вашу скрипку с исправленным кодом. - person joun; 21.12.2018