使用Laravel 5.2计算Y-m-d中存储在数据库中的日期的年龄

时间:2016-02-20 14:17:38

标签: php database date laravel-5.2

Hi用户通过存储在数据库中的表单添加他们的DOB,

我想计算数据库中存储日期的年龄,格式为Y-m-d,

我的问题是:

  • 如何计算年龄?

  • 在逻辑控制器或模型中放置逻辑?

  • 如何以“m-d-Y”格式传递视图中存储的日期

  • 如何传递视图中年龄的逻辑结果。

  • 我在我的模型中使用如下的内容是对的吗?

这是控制器:

public function index()   {   
    $profile   = User::find($this->userid())->profiledetailsHasOne;  //This has Dob field                   
    return view('profile.index',['profile' => $profile ]); 
}

这是我的模特:

public function getAge(){
    $this->birthdate->diff($this->attributes['dob'])
    ->format('%y years, %m months and %d days');
}

这是我的观点:

<tr>
    <th>Age</th>
    <td>{{$profile->getAge()}}</td>
</tr>

这是对的吗?我收到错误如下

  

Call to a member function diff() on null

10 个答案:

答案 0 :(得分:24)

日期可以是Carbon的实例,它提供了各种有用的方法。

在您的模型中,导入Carbon类:

use Carbon\Carbon;

定义一个访问者:

/**
 * Accessor for Age.
 */
public function getAgeAttribute()
{
    return Carbon::parse($this->attributes['birthdate'])->age;
}

然后,您可以将age称为常规属性。例如,在刀片视图中:

<p>{{ $user->age }} years</p>

答案 1 :(得分:7)

直接在您的视图中显示:

\Carbon\Carbon::parse($user->birth)->diff(\Carbon\Carbon::now())->format('%y years, %m months and %d days');

答案 2 :(得分:2)

使用Carbon in build计算Laravel的年龄最好。 在Laravel中返回的日期已经是Carbon格式。

此逻辑应作为模型的默认getter进入模型。

public function getAge(){
    $this->birthdate->diff(Carbon::now())
         ->format('%y years, %m months and %d days');
}

这将导致23年,6个月和26天&#34;

查看http://carbon.nesbot.com/docs/文档,了解您可以使用它完成的所有有趣内容。

假设您在视图中使用模型,并且因为您应该在该模型中创建getAge()函数。

您可以在视图中将您的模型称为$user->getAge()

答案 3 :(得分:1)

感谢您的所有建议。

碳很容易和令人敬畏。

我在模型中添加了这段代码:

module/endmodule

答案 4 :(得分:1)

我在模型中添加了以下代码:

default: &default
  adapter: postgresql
  encoding: unicode

development:

  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test
production:
  <<: *default
  database: app_production
  username: app
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

答案 5 :(得分:1)

在 Laravel 7 中:

numOfRows = TERMINAL_getNumOfRows();  // somehow it gives me 0 as answer when I actually return the number before I send data
                rx_byte = USART3->RDR;

               if (rx_byte == '\n')
                {
                   if (rows==numOfRows)
                   {
                        *(++P_Loc_In_Rx_Buffer3) = '\0';
                        P_Loc_In_Rx_Buffer3 = A_Rx_Buffer3; //where all the data received
                        Command_Received = TRUE; // start to print on usart (terminal)
                        numOfRows=1; // I try to make default to 1 line
                        return;
                   }
                  else
                  {
                      rows++;
                  }
                }

答案 6 :(得分:0)

我还设法在视图中将'd-m-Y'中的日期格式'Y-m-d'从数据库更改为传递日期。

我将此代码放在模型中

public function getDOB(){ 
return $this->dob->format('d-m-Y'); 
 }

答案 7 :(得分:0)

use App\User;
use Carbon\Carbon;

Route::get('/userage',function(){

    $user_info = User::find(1);
    // When  ( $table->date('birthday'); ) 
    $birthday = $user_info->birthday;
    $user_age = Carbon::parse($birthday)->diff(Carbon::now())->format('%y years, %m months and %d days');

    echo($user_age); 
});

答案 8 :(得分:0)

在您的刀片模板中执行此操作

@php
    $birthday = $user->date_of_birth;
    $age = Carbon\Carbon::parse($birthday)->diff(Carbon\Carbon::now())->format('%y years, %m months and %d days');
@endphp

        <p>{{$age}}</p>

答案 9 :(得分:0)

在 Laravel 的 User.php 模型中:
增加了这个功能

public function getAge() {
    $format = '%y years, %m months and %d days';
    return \Carbon\Carbon::parse(auth()->user()->dateofbirth)->diff(\Carbon\Carbon::now())->format($format);
}

在视图刀片中:

Age: {{ auth()->user()->getAge() }}