有没有办法在 Laravel 中取两个日期之间的数字并与之相减
Is there a way to take the number between two dates and subtract with it in Laravel
所以我一直在尝试找到一种方法来 get/take 字段“from”和“to”中两个日期之间的数字(离开 table)然后取那个数字(ex . 它是 7) 并用用户的另一个数字减去它 table a 来自一个名为 leaveBalance 的字段它有一个默认数字 20 所以我想要那个 ( 20 -7) 并且结果被保存在那个特定的用户谁请求休假,在更改后的那个 leaveBalance 字段中,是否也可以添加一个 if 语句来检查日期之间的数字是否大于我们在 leaveBalance 上允许的数字 return一条错误消息
这是请假table
- id
- user_id
- 来自
- 至
- 类型
- 描述
- 状态
- 留言
用户 table 有 leaveBalance 字段,两个 table 没有外键关系 leave 上的 user_id 只存储经过身份验证的用户的 id创建休假时,它仅显示在用户视图中创建的该 ID 的叶子
这是请假控制器
public function create()
{
$leaves = Leave::latest()->where('user_id',auth()->user()->id)->paginate(5);
return view('leave.create',compact('leaves'));
}
public function store(Request $request)
{
$this->validate($request,[
'from'=>'required',
'to'=>'required',
'description'=>'required',
'type'=>'required'
]);
$data=$request->all();
$data['user_id']=auth()->user()->id;
$data['message']='';
$data['status']=0;
$leave =Leave::create($data);
$admins = Admin::all();
$users = User::where('role_id', 2)->get();
foreach ($admins as $admins) {
foreach($users as $users){
$admins->notify(new LeaveSent($leave));
$users->notify((new LeaveSent($leave)));
}
}
return redirect()->back()->with('message','Leave Created');
}
这是请假模型:
{
use Notifiable;
protected $guarded=[];
public function user(){
return $this->belongsTo(User::class,'user_id','id');
}
}
这是离开的景色
<div class="card-body">
<form method="POST" action="{{route('leaves.store')}}">
@csrf
<div class="form-group">
<label>From Date</label>
<div class="col-md-6">
<input class="datepicker" type="text" class="form-control @error('from') is-invalid @enderror" name="from" required="">
@error('from')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group">
<label>To Date</label>
<div class="col-md-6">
<input class="datepicker1" type="text" class="form-control @error('to') is-invalid @enderror" name="to" required="">
我愿意在这方面使用 carbon 我对 carbon 了解不多,但我知道它用于日期等,但因为我使用日期选择器,这可能吗?
您可以使用它来检查是否要了解他休了多少天假,您可以构建函数来执行此操作并返回结果
$from = new DateTime("2020-08-20");
$to = new DateTime("2020-08-28");
$diff = $to->diff($from)->format("%a"); // 8
然后传递给结果,捷豹可以帮你做这件事
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.0.0-alpha14/css/tempusdominus-bootstrap-4.min.css" />
<div class="container">
<div class='col-md-5'>
<div class="form-group">
<div class="input-group date" id="datetimepicker7" data-target-input="nearest">
<input type="text" class="form-control datetimepicker-input" data-target="#datetimepicker7"/>
<div class="input-group-append" data-target="#datetimepicker7" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
<div class='col-md-5'>
<div class="form-group">
<div class="input-group date" id="datetimepicker8" data-target-input="nearest">
<input type="text" class="form-control datetimepicker-input" data-target="#datetimepicker8"/>
<div class="input-group-append" data-target="#datetimepicker8" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js" integrity="sha512-rmZcZsyhe0/MAjquhTgiUcb4d9knaFc7b5xAfju483gbEXTkeJRUMIPk6s3ySZMYUHEcjKbjLjyddGWMrNEvZg==" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.0.0-alpha14/js/tempusdominus-bootstrap-4.min.js"></script>
<script type="text/javascript">
$(function () {
$('#datetimepicker7').datetimepicker({
format: 'DD-MM-YYYY',
minDate: moment.now(),
});
$('#datetimepicker8').datetimepicker({
useCurrent: false,
format: 'DD-MM-YYYY'
});
$("#datetimepicker7").on("change.datetimepicker", function (e) {
var addNewDay = moment(e.date, "DD-MM-YYYY").add(1, 'd').format('DD-MM-YYYY');
console.log(addNewDay);
$('#datetimepicker8').datetimepicker('minDate', addNewDay);
});
$("#datetimepicker8").on("change.datetimepicker", function (e) {
$('#datetimepicker7').datetimepicker('maxDate', e.date);
});
});
</script>
这是一个可以开发的想法,这样 ajax 关于选择休假类型的事情就完成了,它 returns 可以休假的天数,然后你可以通过添加这个数字datetimepicker 函数,我希望我已经成功地使我的想法更接近。谢谢。
public function getUserLeave(Request $request)
{
if ($request->ajax()) {
$type = $request->type;
$user_id = $request->user_id;
$leaves = Leave::where('user_id', $user_id)->where('type', $type)->where(function ($q) {
$date = Carbon::now();
$q->where('from', '<=', date('Y-01-01', strtotime($date))); // 2020-01-01
$q->where('to', '>=', date('Y-m-d', strtotime($date))); // 2020-08-27
})->get();
if (count($leaves) > 0) {
$dateLeave = array();
foreach ($leaves as $leave) {
$leave_from = $leave->from;
$leave_to = $leave->to;
$diff = $leave_to->diff($leave_from)->format("%a");
$dateLeave[] = $diff;
}
$dateLeaveSum = array_sum($dateLeave);
// add type of leave
$annual_leave = 30;
$sick_leave = 5;
if ($type === 'annual_leave'){
$value = ($annual_leave - $dateLeaveSum);
return response()->json($value);
}
if ($type === 'sick_leave'){
$value = ($sick_leave - $dateLeaveSum);
return response()->json($value);
}
}
}
}
例如
public function up()
{
Schema::create('types', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->string('days')->unsigned();
$table->timestamps();
});
}
在 table 叶子添加新列名称 type_id
$table->foreignId('type_id')->nullable()->constrained()->onDelete('cascade');
所以我一直在尝试找到一种方法来 get/take 字段“from”和“to”中两个日期之间的数字(离开 table)然后取那个数字(ex . 它是 7) 并用用户的另一个数字减去它 table a 来自一个名为 leaveBalance 的字段它有一个默认数字 20 所以我想要那个 ( 20 -7) 并且结果被保存在那个特定的用户谁请求休假,在更改后的那个 leaveBalance 字段中,是否也可以添加一个 if 语句来检查日期之间的数字是否大于我们在 leaveBalance 上允许的数字 return一条错误消息
这是请假table
- id
- user_id
- 来自
- 至
- 类型
- 描述
- 状态
- 留言
用户 table 有 leaveBalance 字段,两个 table 没有外键关系 leave 上的 user_id 只存储经过身份验证的用户的 id创建休假时,它仅显示在用户视图中创建的该 ID 的叶子
这是请假控制器
public function create()
{
$leaves = Leave::latest()->where('user_id',auth()->user()->id)->paginate(5);
return view('leave.create',compact('leaves'));
}
public function store(Request $request)
{
$this->validate($request,[
'from'=>'required',
'to'=>'required',
'description'=>'required',
'type'=>'required'
]);
$data=$request->all();
$data['user_id']=auth()->user()->id;
$data['message']='';
$data['status']=0;
$leave =Leave::create($data);
$admins = Admin::all();
$users = User::where('role_id', 2)->get();
foreach ($admins as $admins) {
foreach($users as $users){
$admins->notify(new LeaveSent($leave));
$users->notify((new LeaveSent($leave)));
}
}
return redirect()->back()->with('message','Leave Created');
}
这是请假模型:
{
use Notifiable;
protected $guarded=[];
public function user(){
return $this->belongsTo(User::class,'user_id','id');
}
}
这是离开的景色
<div class="card-body">
<form method="POST" action="{{route('leaves.store')}}">
@csrf
<div class="form-group">
<label>From Date</label>
<div class="col-md-6">
<input class="datepicker" type="text" class="form-control @error('from') is-invalid @enderror" name="from" required="">
@error('from')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group">
<label>To Date</label>
<div class="col-md-6">
<input class="datepicker1" type="text" class="form-control @error('to') is-invalid @enderror" name="to" required="">
我愿意在这方面使用 carbon 我对 carbon 了解不多,但我知道它用于日期等,但因为我使用日期选择器,这可能吗?
您可以使用它来检查是否要了解他休了多少天假,您可以构建函数来执行此操作并返回结果
$from = new DateTime("2020-08-20");
$to = new DateTime("2020-08-28");
$diff = $to->diff($from)->format("%a"); // 8
然后传递给结果,捷豹可以帮你做这件事
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.0.0-alpha14/css/tempusdominus-bootstrap-4.min.css" />
<div class="container">
<div class='col-md-5'>
<div class="form-group">
<div class="input-group date" id="datetimepicker7" data-target-input="nearest">
<input type="text" class="form-control datetimepicker-input" data-target="#datetimepicker7"/>
<div class="input-group-append" data-target="#datetimepicker7" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
<div class='col-md-5'>
<div class="form-group">
<div class="input-group date" id="datetimepicker8" data-target-input="nearest">
<input type="text" class="form-control datetimepicker-input" data-target="#datetimepicker8"/>
<div class="input-group-append" data-target="#datetimepicker8" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js" integrity="sha512-rmZcZsyhe0/MAjquhTgiUcb4d9knaFc7b5xAfju483gbEXTkeJRUMIPk6s3ySZMYUHEcjKbjLjyddGWMrNEvZg==" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.0.0-alpha14/js/tempusdominus-bootstrap-4.min.js"></script>
<script type="text/javascript">
$(function () {
$('#datetimepicker7').datetimepicker({
format: 'DD-MM-YYYY',
minDate: moment.now(),
});
$('#datetimepicker8').datetimepicker({
useCurrent: false,
format: 'DD-MM-YYYY'
});
$("#datetimepicker7").on("change.datetimepicker", function (e) {
var addNewDay = moment(e.date, "DD-MM-YYYY").add(1, 'd').format('DD-MM-YYYY');
console.log(addNewDay);
$('#datetimepicker8').datetimepicker('minDate', addNewDay);
});
$("#datetimepicker8").on("change.datetimepicker", function (e) {
$('#datetimepicker7').datetimepicker('maxDate', e.date);
});
});
</script>
这是一个可以开发的想法,这样 ajax 关于选择休假类型的事情就完成了,它 returns 可以休假的天数,然后你可以通过添加这个数字datetimepicker 函数,我希望我已经成功地使我的想法更接近。谢谢。
public function getUserLeave(Request $request)
{
if ($request->ajax()) {
$type = $request->type;
$user_id = $request->user_id;
$leaves = Leave::where('user_id', $user_id)->where('type', $type)->where(function ($q) {
$date = Carbon::now();
$q->where('from', '<=', date('Y-01-01', strtotime($date))); // 2020-01-01
$q->where('to', '>=', date('Y-m-d', strtotime($date))); // 2020-08-27
})->get();
if (count($leaves) > 0) {
$dateLeave = array();
foreach ($leaves as $leave) {
$leave_from = $leave->from;
$leave_to = $leave->to;
$diff = $leave_to->diff($leave_from)->format("%a");
$dateLeave[] = $diff;
}
$dateLeaveSum = array_sum($dateLeave);
// add type of leave
$annual_leave = 30;
$sick_leave = 5;
if ($type === 'annual_leave'){
$value = ($annual_leave - $dateLeaveSum);
return response()->json($value);
}
if ($type === 'sick_leave'){
$value = ($sick_leave - $dateLeaveSum);
return response()->json($value);
}
}
}
}
例如
public function up()
{
Schema::create('types', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->string('days')->unsigned();
$table->timestamps();
});
}
在 table 叶子添加新列名称 type_id
$table->foreignId('type_id')->nullable()->constrained()->onDelete('cascade');