php - 在 Laravel 中如何使用列连接日期和完成日期获取持续时间值

标签 php laravel laravel-5

我正在尝试显示持续时间值,在 View 中使用数据库“列名”(“date_of_join”,“date_of_completion”)值

喜欢(1/1/2018 到 1/1/2019)这个值显示喜欢(1 年)

( 1/1/2018 到 1/2/2018 ) 值显示为 ( 1 month )

( 1/1/2018 到 10/2/2018 ) 值显示为 (1 个月 10 天 )

如何在 Laravel 中做到这一点 如何在 View 中显示 y=this

我的看法

    @if(isset($details))

    <table class="table table-striped">
           <thead>
                <tr>
                    <th>PHOTO</th>
                    <th>NAME</th>
                    <th>CERTIFICATE NO</th>
                    <th>COURSE</th>
                    <th>COURSE DURATION</th>
                    <th>DATE OF JOIN</th>
                    <th>CENTER NAME</th>
                </tr>
          </thead>
        <tbody>

            @foreach($details as $user)
              <td> 
                <td>{{$user->student_name}}</td>
                <td>{{$user->student_registration_id}}</td>
                <td>{{$user->student_course}}</td>
                <td>{{                     }}</td>
                <td>{{$user->date_of_join}}</td>
                <td>{{$user->center_name}}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
    @elseif(isset($message))
    <p style="color:red" align="center">{{$message}}</p>
    @endif
</div>

我的路线

Route::any( '/search', function(){
  $id = Input::get( 'id' );
  $certificate_issue_date = Input::get('certificate_issue_date');
  if($id != ""){

   $user = Student::where( 'student_registration_id', 'LIKE', '%' . $id . '%' );
   if (!empty($certificate_issue_date))
    {
       $user->where('certificate_issue_date','=',$certificate_issue_date)->where('student_certificate_approval', 'APPROVED');
    }
        $user = $user->get();

        if (count ( $user ) > 0)
     return view( 'verify_certificate' )->withDetails( $user )->withQuery($id)->withDateOfJoin($certificate_issue_date);
     }
  return view ( 'verify_certificate' )->withMessage ( "No Details found!" );
  } );

最佳答案

你可以通过 Mutators 来完成;

并使用Carbon获取持续时间(例如:diffInSeconds、diffInDays、diffForHumans等)

如果你想要这样准确的格式,你需要写一个方法。

在你的学生模型中:

Class Student extend Model
{
    ...
    public function getDurationAttribute() {
        return Student::diffToHumanInterval($this->date_of_join, $this->date_of_completion);
    }

    public static function diffToHumanInterval($start, $end) {
        $human = '';
        $start_date = \Carbon\Carbon::parse($start);
        $end_date = \Carbon\Carbon::parse($end);
        $years = $end_date->diffInYears($start_date);
        if ($years > 0) { 
            $human = $human.$years.' years ';
            $start_date = $start_date->addYears(years);
        }
        $months = $end_date->diffInMonths($start_date);
        if ($months > 0) {
            $human = $human.$months.' months ';
            $start_date = $start_date->addMonths($months);
        }
        $days = $end_date->diffInDays($start_date);
        if ($days > 0) {
            $human = $human.$days.' days ';
            $start_date = $start_date->addDays($days);
        }
        return $human;
    }
    ...
}

在你看来:

<td>{{  $user->duration  }}</td>

关于php - 在 Laravel 中如何使用列连接日期和完成日期获取持续时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59170614/

相关文章:

php - 如何在 Laravel 5.2 中将 taskId 插入到文件表中

javascript - PHP 使用 json stringify 对象

php - 删除单条记录 Laravel

laravel - 无法使用 Vuetify 和 Laravel 读取未定义的属性 't'

laravel - Laravel Scout Elasticsearch -找不到索引

php - Laravel 5.5 自动发现未注册

javascript - Laravel Blade,使用 javascript 设置 textarea 多行值

php - ReflectionException "Cannot access non-public member",但属性可访问?

php - If 语句在条件中只有一个变量

php - SQL查询匹配两个字段