获取最近的当前日期(javascript)

时间:2017-05-19 10:22:49

标签: javascript arrays date countdown

所以我有一系列日期,想要获取当前日期并将其放入倒计时时钟 我有这个代码atm:

return Response::json(array(
    'item_image' => $item_image,
    'item_something' => $item_something,
    'item_more' => $item_more,
));

这似乎没有做任何事情,所以我真的不知道该怎么做。目前它刚刚为倒计时提出NAN

2 个答案:

答案 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)

所以我为你做了肮脏的工作,所有你需要做的就是调试,在这里和那里放置一些控制台日志来找出问题所在,这有几件事。

1。你的日期格式搞砸了(至少对我而言)。

如果您希望将其传递到Date()构造函数中,请输入“2017年5月24日”,而不要输入“2017年5月24日”。您可以通过执行以下操作对此进行验证:console.log(new Date('24/5/2017'));

2。您的过滤功能不好

您想要下一个日期,但是检查now - date > 0这意味着只有过去的日期才有效。使用date - now > 0now - date < 0

3。你弄错了

document.getElementById("demoo").innerHTML = orderedDates

注意'demoo'中的额外'o'。

4。您使用了无效语法

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,看看你的数据是什么样的

相关问题