Issue
I need to start a time from a start date for n number of days. When I use date (now) inside set interval function it works but if I use the date from parameter then the time is always 0.
let startDate = new Date().getTime();
startTimer(days,startDate) {
let today = new Date().getTime();
let countDown = this.addDays(today,days);
let countDown2 = new Date(countDown).getTime();
let x = setInterval(() => {
let now = new Date().getTime();
//let distance = countDown2 - startDate; //not working when i use startDate here
let distance = countDown2 - now; //working when i use 'now'
let hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
this.displayDate = hours + "h";
if(distance < 0) {
clearInterval(x);
this.displayDate = "Expired";
}
})
}
addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
when i use startDate as 10 from parameter, the o/p is 10d: 0h: 0m: 0s (time always 0)
when i use any date other than now inside setinterval time in o/p will be 0 say 10d: 0h: 0m: 0s
Solution
remove the init of x on the interval, and make sure you add a time that the interval is base off at the end of it...
setInterval(() =>
// end of interval
}, 1000) // 1000ms = 1 second
and the function needs to return something... in this example i included the returns in a console.log() just to visualize it but removing that is easy.
if(distance < 0) {
clearInterval(x);
return console.log("Expired")
} else {
return console.log(count_days + "d: " + hours + "h: " + minutes + "m: " + seconds + "s")
}
after those changes you should be able to call the startTimer()
function and it should work just fine...
startTimer(10, startDate)
/* OUTPUT
9d: 23h: 59m: 58s
9d: 23h: 59m: 57s
9d: 23h: 59m: 56s
9d: 23h: 59m: 55s
9d: 23h: 59m: 54s
*/
Answered By - gavin
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.