我正在使用 laravel,我想计算控制器中存储函数中两个日期之间的天数并自动显示在索引视图中

Posted

技术标签:

【中文标题】我正在使用 laravel,我想计算控制器中存储函数中两个日期之间的天数并自动显示在索引视图中【英文标题】:I'm using laravel, I want to calculate the days between two dates in store function in the controller and show in the index view automatically 【发布时间】:2021-08-19 19:04:19 【问题描述】:

这是我的离开应用程序控制器,所有离开的功能都在这里。我想计算用户输入的日期天数,将天数存储在数据库中并将其显示在视图刀片中。

class LeaveApplicationController extends Controller

    public function __construct()
    
        $this->middleware('auth');
    

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    
       $leaverequest = Application::with('users', 'leaves')
        ->where('user_id', auth()->user()->id)
        ->get();

        return view('admin.leaverequest.index', compact('leaverequest'));
    

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    
        $user = User::pluck('name', 'id');

        $leave = Leave::pluck('leave_type', 'id');

        return view('admin.leaverequest.create', compact('user', 'leave'));
    

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    
         //dd($request);
     
        Application::create([
            'user_id'=>auth()->user()->id,
            'leave_id'=>$request->leave_id,
            'date_from'=>$request->date_from,
            'date_to'=>$request->date_to,
            'days'=> $request->days,
        ]);
       return redirect()->route('admin.leaverequest.index')
            ->with('success', 'Leave Application Submitted');

    

这是请假请求 index.blade.php 的视图。此处可以显示除列天数之外的其他列中的所有数据。我不知道怎么称呼它。

<table class="table table-bordered">
        <tr>
            <th>No</th>
            <th>Name</th>
            <th>Leave Type</th>
            <th>Date From</th>
            <th>Date To</th>
            <th>Days Taken</th>
            <th>Status Application</th>
            
        </tr>
        @foreach ($leaverequest as $t)
        <tr>
            <td> $t->id </td>
            <td> $t->users->name </td>
            <td> $t->leaves->leave_type </td>
            <td> $t->date_from </td>
            <td> $t->date_to </td>
            <td> $t->total_days</td>
            <td>
                
                    @if($t->status==0)
                        <span class="badge badge-pill badge-warning">Pending</span>
                    @elseif($t->status==1)
                        <span class="badge badge-pill badge-success">Approved</span>
                    @else
                        <span class="badge badge-pill badge-danger">Rejected</span>
                    @endif
            </td>
        </tr>
        @endforeach
    </table>

这是请假请求 create.blade.php 的视图。在这里我希望自动计算并显示天数,但在这里我必须输入天数。

<form action=" route('admin.leaverequest.store') " method="POST">
    @csrf
  
    <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
            <select class="form-control" name="leave_id">
                <option value="">-- Choose Leave Types --</option>
                @foreach ($leave as $id => $type)
                    <option
                        value="$id"  (isset($application['leave_id']) && $application['leave_id'] == $id) ? ' selected' : '' >$type</option>
                    </option>
                @endforeach
            </select>
        </div>
    </div>
    <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
            <div class="form-group">
                <strong>Date From:</strong>
                <input type="date" name="date_from" class="form-control" placeholder="Start Date">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
            <div class="form-group">
                <strong>Date To:</strong>
                <input type="date" name="date_to" class="form-control" placeholder="End Date">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
            <div class="form-group">
                <strong>Days Taken</strong>
                <input type="text" name="days" class="form-control" id="TotalDays" placeholder="Number of leave days">
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-12 text-center">
            <button type="submit" class="btn btn-primary">Submit</button>
            <a class="btn btn-primary" href=" route('admin.leaverequest.index') "> Back</a>
        </div>
    </div>
</form>
@endsection

这是我第一次使用 laravel 框架,尽管我看到了其他一些答案和指导,但我完全无法帮助自己解决这个问题。请帮帮我,谢谢。

【问题讨论】:

我想您正在寻找这个? ***.com/questions/39508963/… 这能回答你的问题吗? Calculate difference between two dates using Carbon and Blade 我应该在控制器的 store 函数下添加它并在我的视图中调用 $total_days 吗?抱歉,如果我看起来像个假人,因为我对这个 T_T Application::create([ $user_id= auth()->user()->id; $leave_id= $request->leave_id; $dateFrom = $ request->date_from; $dateTo = $request->date_to $date1 = new DateTime($dateFrom); $date2 = new DateTime($dateTo); $interval = $date1->diff($date2); $total_days = $间隔->格式('%a'); ]); return redirect()->route('admin.leaverequest.index') ->with('success', 'Leave Application Submitted'); 【参考方案1】:

由于您是 laravel 的新手。这是答案。我假设 date_fromdate_to 的日期格式是 month/date/year

 $dateFrom=\Carbon\Carbon::createFromFormat('m/d/Y',$request->date_from);
  $dateTo=\Carbon\Carbon::createFromFormat('m/d/Y',$request->date_to);

    if($dateTo>$dateFrom)
        dd($dateFrom->diffInDays($dateTo));
    

上面的代码将返回两个日期之间的天数

更新

public function store(Request $request)
   
          $dateFrom=\Carbon\Carbon::createFromFormat('m/d/Y',$request->date_from);
  $dateTo=\Carbon\Carbon::createFromFormat('m/d/Y',$request->date_to);

  
        Application::create([
            'user_id'=>auth()->user()->id,
            'leave_id'=>$request->leave_id,
            'date_from'=>$request->date_from,
            'date_to'=>$request->date_to,
            'days'=> $dateFrom->diffInDays($dateTo),
        ]);
       return redirect()->route('admin.leaverequest.index')
            ->with('success', 'Leave Application Submitted');

    

【讨论】:

我已经这样做了,但没有。天数未存储在数据库中 'days'=> $request->days, to 'days'=>$dateFrom->diffInDays($dateTo), 上面的解决方案应该放在Application::create之前还是里面?它确实显示了任何东西:((( @wartortle.upted 我的答案 这很好用!!!!!!非常感谢 :) 感觉很开心,尽管在完成这个项目之前我还有很长的路要走去探索。【参考方案2】:
 $date1 = new DateTime('2021-02-01');
 $date2 = new DateTime('2021-06-01');
 $interval = $date1->diff($date2);
 $interval->format('%a')+1;

使用上述功能。它会给你两个日期之间的天数。

【讨论】:

我已经这样做了,但没有。天数未存储在数据库中

以上是关于我正在使用 laravel,我想计算控制器中存储函数中两个日期之间的天数并自动显示在索引视图中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证控制器存储中的变量

laravel 4.2 存储/上传个人资料图片并从数据库中检索

在 Laravel 5.2 中通过 RESTful 资源控制器使用 jQuery Ajax Post 方法将数据存储在数据库中

如何使用 Laravel 制作自定义主题以及在哪里存储主题数据?

如何检索存储在 select2 下拉列表中的数据?

Laravel 控制器存储以驼峰格式接收的数据