所以我有一系列日期,想要获取当前日期并将其放入倒计时时钟 我有这个代码atm:
return Response::json(array(
'item_image' => $item_image,
'item_something' => $item_something,
'item_more' => $item_more,
));
这似乎没有做任何事情,所以我真的不知道该怎么做。目前它刚刚为倒计时提出NAN
答案 0 :(得分:2)
一个问题是,例如,new Date('24/5/2017')
会产生Invalid Date
。我认为这不是new Date()
识别的有效日期格式。
如果您真的需要这样的格式,您可以执行以下操作:
var dates = [
'24/5/2017', // past Date for testing
'12/6/2017',
'14/6/2017',
'16/6/2017',
'20/6/2017',
'20/6/2017',
'22/6/2017',
'23/6/2017',
'26/6/2017'
].map(function (d) {
var parts = d.split('/');
return new Date(parts[2], parts[1] - 1 /* january = 0 */, parts[0]);
});
所以你最终得到了实际的Date对象而不是字符串,方法是将顺序中的参数传递给它理解的Date构造函数。
另一点:由于您可以将Date对象解释为Number(产生与new Date().getTime()
相同的值,即自1970年1月1日以来的毫秒数),您可以使用以下方法获得最小值:{{1} }。因此,Math.min.apply(Math, dates)
下面是一个可以做你想做的工作的冲突。
var nextDate = new Date(Math.min.apply(Math, dates.filter(x => +x > Date.now())));
var dates = [
'20/4/2017',
'24/5/2017',
'12/6/2017',
'14/6/2017',
'16/6/2017',
'20/6/2017',
'20/6/2017',
'22/6/2017',
'23/6/2017',
'26/6/2017'
].map(function (d) {
var parts = d.split('/');
return new Date(parts[2], parts[1] - 1 /* january = 0 */, parts[0]);
});
var nextDate = new Date(Math.min.apply(Math, dates.filter(x => +x > Date.now())));
var x = setInterval(function() {
// Get todays date and time
var now = new Date().getTime();
// Find the distance between now an the count down date
var distance = nextDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
// If the count down is over, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
答案 1 :(得分:0)
所以我为你做了肮脏的工作,所有你需要做的就是调试,在这里和那里放置一些控制台日志来找出问题所在,这有几件事。
如果您希望将其传递到Date()
构造函数中,请输入“2017年5月24日”,而不要输入“2017年5月24日”。您可以通过执行以下操作对此进行验证:console.log(new Date('24/5/2017'));
您想要下一个日期,但是检查now - date > 0
这意味着只有过去的日期才有效。使用date - now > 0
或now - date < 0
。
document.getElementById("demoo").innerHTML = orderedDates
注意'demoo'中的额外'o'。
var nextDate = orderedDates.filter(function(date) {
return (var now = new Date().getTime(); - date) > 0;
})[0];
这不起作用,因为您无法像这样声明now
。将now
的声明提取到return
语句上方的一行,如下所示:
var nextDate = orderedDates.filter(function(date) {
var now = new Date().getTime();
return (now - date) < 0;
})[0];
如果您应用所有这些更正,您的倒计时应该有效。
另外,下次不要太懒,自己调试一下。这真的不难,只需打开你的开发者控制台,然后在这里和那里放置断点/ console.logs,看看你的数据是什么样的