【发布时间】:2018-05-30 10:50:44
【问题描述】:
我在产品表 start_discounted 和 end_discounted 中存储了 2 个日期,这 2 列负责我的折扣价格持续时间。现在,当我的产品折扣期限到期时,除了恢复正常价格外,它仍保持折扣价,并且我的计时器变为负数。
代码
我的模型范围
public function scopeValidDiscount($query){
return $query->where('start_discounted', '<=', Carbon::now()->toDateTimeString())
->where('end_discounted', '>=', Carbon::now()->toDateTimeString());
}
controller
public function product($slug){
$product = Product::where('slug', $slug)->firstOrFail();
$validdiscount = $product->ValidDiscount()->get();
//...
}
blade
@if($validdiscount)
show timer
@endif
PS:我需要避免在两种情况下显示计时器,
1折扣日期已过期。2产品折扣日期为空。
知道我的错误在哪里吗?
更新
我在刀片中的计时器:
@if($validdiscount)
<div class="deals_timer row align-items-center">
<div class="col-md-6 deals_timer_title_container">
<div class="deals_timer_title">{{__('store.hurryup')}}</div>
<div class="deals_timer_subtitle">{{__('store.endsin')}}</div>
</div>
<div class="col-md-6 deals_timer_content ml-auto">
<div class="deals_timer_box clearfix" data-target-time="{{$end}}">
<div class="text-center deals_timer_unit">
<div id="deals_timer3_hr" class="deals_timer_hr"></div>
<span>{{__('store.hours')}}</span>
</div>
<div class="text-center deals_timer_unit">
<div id="deals_timer3_min" class="deals_timer_min"></div>
<span>{{__('store.mins')}}</span>
</div>
<div class="text-center deals_timer_unit">
<div id="deals_timer3_sec" class="deals_timer_sec"></div>
<span>{{__('store.secs')}}</span>
</div>
</div>
</div>
</div>
@endif
请关注data-target-time="{{$end}}",我认为问题可能出在这里...
我的计时器脚本:
<script>
$(document).ready(function(){
if($('.deals_timer_box').length)
{
var timers = $('.deals_timer_box');
timers.each(function()
{
var timer = $(this);
var targetTime;
var target_date;
// Add a date to data-target-time of the .deals_timer_box
// Format: "Feb 17, 2018"
if(timer.data('target-time') !== "")
{
targetTime = timer.data('target-time');
target_date = new Date(targetTime).getTime();
}
else
{
var date = new Date();
date.setDate(date.getDate() + 2);
target_date = date.getTime();
}
// variables for time units
var days, hours, minutes, seconds;
var h = timer.find('.deals_timer_hr');
var m = timer.find('.deals_timer_min');
var s = timer.find('.deals_timer_sec');
setInterval(function ()
{
// find the amount of "seconds" between now and target
var current_date = new Date().getTime();
var seconds_left = (target_date - current_date) / 1000;
console.log(seconds_left);
// do some time calculations
days = parseInt(seconds_left / 86400);
seconds_left = seconds_left % 86400;
hours = parseInt(seconds_left / 3600);
hours = hours + days * 24;
seconds_left = seconds_left % 3600;
minutes = parseInt(seconds_left / 60);
seconds = parseInt(seconds_left % 60);
if(hours.toString().length < 2)
{
hours = "0" + hours;
}
if(minutes.toString().length < 2)
{
minutes = "0" + minutes;
}
if(seconds.toString().length < 2)
{
seconds = "0" + seconds;
}
// display results
h.text(hours);
m.text(minutes);
s.text(seconds);
}, 1000);
});
}
});
</script>
{{$end}}
这是我在控制器中的内容,以便获取我的过期日期并在上面的 JavaScript 中使用 if:
$mytime = Carbon::now();
if(!empty($product->start_discounted && $product->end_discounted)){
$start = $product->start_discounted->format('M d, Y');
$end = $product->end_discounted->format('M d, Y');
}
那么我也有我的范围代码:
$validdiscount = $product->ValidDiscount()->get();
现在我认为我的问题是由以下原因引起的:我的到期日期来自 产品直接
$product->end_discounted,而我在使用范围时尽量避免它 它在我的模型中做同样的碳事情,不确定! (也许我也应该按范围获取我的$end?
【问题讨论】:
-
show timer部分的详细信息?我相信它的观点是相关的。 -
我更感兴趣的是您为什么要在已获取的
Product上调用作用域 (validDiscount())。产品表上有start_discounted和end_discounted字段吗? -
@BagusTesa 更新了我的问题。
-
@devk 是的,正如我在问题顶部所解释的那样,
I store 2 dates in my products table所以我没有使用任何折扣表,这就是我的范围在我的产品表中的原因。