【发布时间】:2021-09-27 00:30:30
【问题描述】:
我正在尝试从数组中获取最近的日期,并在倒数计时器中使用它以及对象相关的属性,如事件。
我已经设法做到了这一点,从网上四处查看,但我的代码只从数组中提取最后一个条目,而不是最近的日期。
如果有人可以帮助或推动我朝着正确的方向前进,那就太好了。
<p id="demo"></p>
<p id="celebration"></p>
<script>
// Get today's date and time
var now = new Date().getTime();
var data = [
{
date: "04/10/2021",
event: "event 1",
},
{
date: "08/15/2022",
event: "event 2",
},
{
date: "09/15/2021",
event: "event 3",
},
{
date: "01/12/2025",
event: "event 4",
},
];
var closest = data.reduce((a, b) => (a.date - now < b.date - now ? a : b));
console.log(closest.date);
// Set the date we're counting down to
var countDownDate = new Date(closest.date);
// Update the count down every 1 second
var x = setInterval(function () {
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - 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);
// Display the result in the element with id="demo"
document.getElementById("demo").innerHTML =
days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
document.getElementById("celebration").innerHTML = closest.event;
// If the count down is finished, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
document.getElementById("celebration").innerHTML = "None";
}
}, 1000);
</script>
【问题讨论】:
-
数组中具有
date属性的对象是字符串。要将它们视为日期,您需要先解析它们 -
如果有
expired日期怎么办。你还想要那个还是下一个没有过期的? -
嗨 @decpk 是的,如果数组中的某个日期已经过去(过期),我不想显示它并转到下一个
-
然后就简单的排序,得到第一个没有过期的数据
标签: javascript arrays date object properties