从数据库中查找两个日期之间的差异,并将差异保存到Laravel中的数据库

我有一个简单的Laravel预订系统,我想计算我的预订价格。首先,我需要找到我的记录(time_from)和(time_to)之间的区别,然后我想将这些数据保存到数据库中,每晚将我的房价乘以我该怎么办?如果您有一个简单的解决方案,请告诉我。我是Laravel的新手,等待您的帮助。

它是我的BookingsController:

<?php

namespace App\Http\Controllers\Admin;

use App\Booking;
use App\Room;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreBookingsRequest;
use App\Http\Requests\Admin\UpdateBookingsRequest;

class BookingsController extends Controller
{
    /**
     * Display a listing of Booking.
     *
     * @return \Illuminate\Http\Response
     */
    public function index( )
    {
        if (!Gate::allows('booking_access')) {
            return abort(401);
        }


        if (request('show_deleted') == 1) {
            if (!Gate::allows('booking_delete')) {
                return abort(401);
            }
            $bookings = Booking::onlyTrashed()->get();
        } else {
            $bookings = Booking::all();
        }

        return view('admin.bookings.index',compact('bookings'));
    }

    /**
     * Show the form for creating new Booking.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        if (!Gate::allows('booking_create')) {
            return abort(401);
        }


        $rooms = Room::get()->pluck('room_number','id')->prepend(trans('quickadmin.qa_please_select'),'');
        $users = User::get()->pluck('id','');
        return view('admin.bookings.create',compact('rooms','users'));
    }

    /**
     * Store a newly created Booking in storage.
     *
     * @param  \App\Http\Requests\StoreBookingsRequest $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreBookingsRequest $request)
    {
        if (!Gate::allows('booking_create')) {
            return abort(401);
        }
        $booking = Booking::create($request->all());
        \Session::flash('flash_message','Your reservation was successfully created. Awaiting confirmation from the administrator');
        return redirect()->route('home');
    }


    /**
     * Show the form for editing Booking.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        if (!Gate::allows('booking_edit')) {
            return abort(401);
        }


        $rooms = Room::get()->pluck('room_number','');
        $booking = Booking::findOrFail($id);

        return view('admin.bookings.edit',compact('booking','rooms','users'));
    }

    /**
     * Update Booking in storage.
     *
     * @param  \App\Http\Requests\UpdateBookingsRequest $request
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function update(UpdateBookingsRequest $request,$id)
    {
        if (!Gate::allows('booking_edit')) {
            return abort(401);
        }
        $booking = Booking::findOrFail($id);
        $booking->update($request->all());


        return redirect()->route('admin.bookings.index');
    }


    /**
     * Display Booking.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        if (!Gate::allows('booking_view')) {
            return abort(401);
        }
        $booking = Booking::findOrFail($id);

        return view('admin.bookings.show',compact('booking'));
    }


    /**
     * Remove Booking from storage.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if (!Gate::allows('booking_delete')) {
            return abort(401);
        }
        $booking = Booking::findOrFail($id);
        $booking->delete();

        return redirect()->route('admin.bookings.index');
    }

    /**
     * Delete all selected Booking at once.
     *
     * @param Request $request
     */
    public function massDestroy(Request $request)
    {
        if (!Gate::allows('booking_delete')) {
            return abort(401);
        }
        if ($request->input('ids')) {
            $entries = Booking::whereIn('id',$request->input('ids'))->get();

            foreach ($entries as $entry) {
                $entry->delete();
            }
        }
    }


    /**
     * Restore Booking from storage.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function restore($id)
    {
        if (!Gate::allows('booking_delete')) {
            return abort(401);
        }
        $booking = Booking::onlyTrashed()->findOrFail($id);
        $booking->restore();

        return redirect()->route('admin.bookings.index');
    }

    /**
     * Permanently delete Booking from storage.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function perma_del($id)
    {
        if (!Gate::allows('booking_delete')) {
            return abort(401);
        }
        $booking = Booking::onlyTrashed()->findOrFail($id);
        $booking->forceDelete();

        return redirect()->route('admin.bookings.index');
    }
}

Booking.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\SoftDeletes;
use Auth;

/**
 * Class Booking
 *
 * @package App
 * @property string $room
 * @property string $time_from
 * @property string $time_to
 * @property text $additional_information
 */
class Booking extends Model
{
    use SoftDeletes;

    protected $fillable = ['time_from','time_to','diff_days','additional_information','room_id','first_name','last_name','address','phone','email','user_id'];
    /**
     * Set to null if empty
     * @param $input
     */


    /**
     * Set to null if empty
     * @param $input
     */
    public function setRoomIdAttribute($input)
    {
        $this->attributes['room_id'] = $input ? $input : null;

    }

    public function setUserIdAttribute($input)
    {
        $this->attributes['user_id'] = $input ? $input : null;

    }
    /**
     * Set attribute to date format
     * @param $input
     */
    public function setTimeFromAttribute($input)
    {
        if ($input != null && $input != '') {
            $this->attributes['time_from'] = Carbon::createFromFormat(config('app.date_format') . ' H:i',$input)->format('Y-m-d H:i');
        } else {
            $this->attributes['time_from'] = null;
        }
    }

    /**
     * Get attribute from date format
     * @param $input
     *
     * @return string
     */
    public function getTimeFromAttribute($input)
    {
        $zeroDate = str_replace(['Y','m','d'],['0000','00','00'],config('app.date_format') . ' H:i:s');

        if ($input != $zeroDate && $input != null) {
            return Carbon::createFromFormat('Y-m-d H:i:s',$input)->format(config('app.date_format') . ' H:i:s');
        } else {
            return '';
        }
    }

    /**
     * Set attribute to date format
     * @param $input
     */
    public function setTimeToAttribute($input)
    {
        if ($input != null && $input != '') {
            $this->attributes['time_to'] = Carbon::createFromFormat(config('app.date_format') . ' H:i',$input)->format('Y-m-d H:i');
        } else {
            $this->attributes['time_to'] = null;
        }
    }

    /**
     * Get attribute from date format
     * @param $input
     *
     * @return string
     */
    public function getTimeToAttribute($input)
    {
        $zeroDate = str_replace(['Y',config('app.date_format') . ' H:i');

        if ($input != $zeroDate && $input != null) {
            return Carbon::createFromFormat('Y-m-d H:i:s',$input)->format(config('app.date_format') . ' H:i:s');
        } else {
            return '';
        }
    }

    public function room()
    {
        return $this->belongsTo(Room::class,'room_id')->withTrashed();
    }


    public function user()
    {
        return $this ->belongsTo(User::class,'user_id');
    }

    public function getFullNameAttribute()
    {
        return $this->first_name . ' ' . $this->last_name;
    }
}

还有我的数据库

public function up()
    {
        if(! Schema::hasTable('bookings')) {
            Schema::create('bookings',function (Blueprint $table) {
                $table->increments('id');
                $table->datetime('time_from')->nullable();
                $table->datetime('time_to')->nullable();
                $table->integer('diff_days')->nullable();
                $table->text('additional_information')->nullable();
                $table->string('first_name');
                $table->string('last_name');
                $table->string('address')->nullable();
                $table->string('phone')->nullable();
                $table->string('email');

                $table->timestamps();
                $table->softDeletes();

                $table->index(['deleted_at']);
            });
        }
    }
ls_liusong1 回答:从数据库中查找两个日期之间的差异,并将差异保存到Laravel中的数据库

您可能想减去时间戳,因为要知道time_to总是高于time_from,因此我们将继续下一步:

// Note: $booking is a defined object of Booking model
($booking->time_to->timestamp) - ($booking->time_from->timestamp)

据您所知,我们将获得一个整数作为这两个时间戳记相减的值。您可以将结果除以86400(一天的秒数),以获取预订天数。

您可能想添加一个函数,该函数将在您希望收集差额时随时使用提及的代码并返回预订的天数,或者可以将其存储到数据库中。

,

你可以这样做

$start_time = \Carbon\Carbon::parse($request->input('time_from'));
$finish_time = \Carbon\Carbon::parse($request->input('time_to'));
$diff_days = $start_time->diffInDays($finish_time,false);

您需要将false作为第二个参数传递给diffInDays方法,否则您将始终得到肯定的结果。

,

要获取两个日期之间的差异-

$time_from      = date_create('2019-11-01'); // Replace '2019-11-01' string with your DB/Input Value
$time_to        = date_create('2019-11-06'); // Replace '2019-11-01' string with your DB/Input Value
$diff           = date_diff($time_from,$time_to); 
$diff_days      = $diff->format("%a");

注意: 这将返回5,这意味着'2019-11-01''2019-11-06'之间的差异。但在您的情况下,您可能必须在$diff_days上加1才能获得访问时间。

本文链接:https://www.f2er.com/3156355.html

大家都在问