Javascript 不同日期显示相同的倒计时值
鉴于此HTML:Javascript 不同日期显示相同的倒计时值,javascript,Javascript,鉴于此HTML: <span class="countdown-date" data-countdown-date="2020-08-31 18:00:00"></span> <span class="countdown-date" data-countdown-date="2020-12-31 00:00:00"></span> 问题是两个倒计时日期都显示相同的值
<span class="countdown-date" data-countdown-date="2020-08-31 18:00:00"></span>
<span class="countdown-date" data-countdown-date="2020-12-31 00:00:00"></span>
问题是两个倒计时日期都显示相同的值
如下所示:136d 1h 56m 26s(加载页面时的初始值)
任何帮助都将不胜感激
JS代码的来源:。需要在interval函数中声明countDownDate 当它在外部声明时,变量将被覆盖
document.addEventListener('DOMContentLoaded',函数(){
var list=document.getElementsByClassName('countdown-date');
对于(列表中的项目){
//log(item.getAttribute(“数据倒计时日期”);
//显示2020-08-31 18:00:00和2020-12-31 00:00:00。
//console.log(倒计时);
//显示159886080000和1609333200000
//每1秒更新一次倒计时
var x=设置间隔(函数(){
//确定我们倒计时的日期
var countDownDate=新日期(item.getAttribute(“数据倒计时日期”).getTime();
//获取今天的日期和时间
var now=new Date().getTime();
//找出现在和倒计时日期之间的距离
var距离=倒计时日期-现在;
//天、小时、分钟和秒的时间计算
变量天数=数学楼层(距离/(1000*60*60*24));
//控制台日志(天);
var小时=数学楼层(
(距离%(1000*60*60*24))/(1000*60*60)
);
var分钟=数学地板(
(距离%(1000*60*60))/(1000*60)
);
var秒=数学楼层((距离%(1000*60))/1000);
//在id为“倒计时日期”的元素中显示结果
item.innerHTML=
天+小时+小时+分钟+米+秒+秒;
//如果倒计时结束,写一些文字
如果(距离<0){
净间隔(x);
item.innerHTML='过期';
}
}, 1000);
};
});代码>
文档。addEventListener('DOMContentLoaded',函数(){
var list=document.getElementsByClassName('countdown-date');
函数processdate(倒计时日期,项){
//获取今天的日期和时间
var now=new Date().getTime();
//找出现在和倒计时日期之间的距离
var距离=倒计时日期-现在;
//天、小时、分钟和秒的时间计算
变量天数=数学楼层(距离/(1000*60*60*24));
//控制台日志(天);
var小时=数学楼层(
(距离%(1000*60*60*24))/(1000*60*60)
);
var分钟=数学地板(
(距离%(1000*60*60))/(1000*60)
);
var秒=数学楼层((距离%(1000*60))/1000);
//在项目中显示结果
item.innerHTML=
天+小时+小时+分钟+米+秒+秒;
//如果倒计时结束,写一些文字
如果(距离<0){
净间隔(x);
item.innerHTML='过期';
}
}
对于(列表中的项目){
//确定我们倒计时的日期
var countDownDate=新日期(item.getAttribute(“数据倒计时日期”).getTime();
//每1秒更新一次倒计时
var x=设置间隔(processdate,1000,countDownDate,item);
}
});
谢谢安德鲁。虽然这样做有效,但我发现了一种更好的方法,通过将日期处理逻辑放在命名函数中而不是匿名函数中,来避免每秒获取静态数据属性值。
document.addEventListener('DOMContentLoaded', function () {
var list = document.getElementsByClassName('countdown-date');
for (let item of list) {
// console.log(item.getAttribute("data-countdown-date"));
// shows 2020-08-31 18:00:00 and 2020-12-31 00:00:00.
// Set the date we're counting down to
var countDownDate = new Date(item.getAttribute("data-countdown-date")).getTime();
// console.log(countDownDate);
// shows 1598860800000 and 1609333200000
// Update the count down every 1 second
var x = setInterval(function () {
// Get todays date and time
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));
// console.log(days);
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="countdown-date"
item.innerHTML =
days + 'd ' + hours + 'h ' + minutes + 'm ' + seconds + 's ';
// If the count down is finished, write some text
if (distance < 0) {
clearInterval(x);
item.innerHTML = 'EXPIRED';
}
}, 1000);
};
});
document.addEventListener('DOMContentLoaded', function () {
var list = document.getElementsByClassName('countdown-date');
function processdate(countDownDate, item) {
// Get todays date and time
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));
// console.log(days);
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 item
item.innerHTML =
days + 'd ' + hours + 'h ' + minutes + 'm ' + seconds + 's ';
// If the count down is finished, write some text
if (distance < 0) {
clearInterval(x);
item.innerHTML = 'EXPIRED';
}
}
for (let item of list) {
// Set the date we're counting down to
var countDownDate = new Date(item.getAttribute("data-countdown-date")).getTime();
// Update the count down every 1 second
var x = setInterval(processdate, 1000, countDownDate, item);
}
});