I'm trying to make an automatic marking bell, using a timer with an array data source, but when run the script only displays one time according to the array source data that I created. The following is the script that I made
function start_bell(){
var bell_scedule = ['18:52:00','18:53:00','18:54:00','18:55:00','18:56:00'];
var index = 0;
window.setInterval(
function(){
var d = new Date();
var s = d.getSeconds();
var m = d.getMinutes();
var h = d.getHours();
var realtime =("0" + h).substr(-2) + ":" + ("0" + m).substr(-2) + ":" + ("0" + s).substr(-2);
var timer=realtime;
if(bell_scedule[index]==timer){
alert('play');
}else{
console.log('pause');
}
index++;
if(index >= bell_scedule.length){
index = 0;
}
},1000
);
}
Hopefully friends who have better knowledge can help me
Instead of incrementing the index each second, we loop through the bell_schedule
array every second, comparing each time with the current time (realtime
).
If a match is found, we trigger the alert and break the loop for that second to avoid multiple alerts in case there are duplicates in the array.
The index variable is removed because we're now checking all the scheduled times every second, so there's no risk of skipping any entries.
function start_bell() {
var bell_schedule = ['18:52:00', '18:53:00', '18:54:00', '18:55:00', '18:56:00'];
window.setInterval(function () {
var d = new Date();
var s = d.getSeconds();
var m = d.getMinutes();
var h = d.getHours();
var realtime = ("0" + h).substr(-2) + ":" + ("0" + m).substr(-2) + ":" + ("0" + s).substr(-2);
console.log(realtime); // To check the current time
// Check each schedule time against the current time
for (var i = 0; i < bell_schedule.length; i++) {
if (bell_schedule[i] === realtime) {
alert('play');
break; // Break the loop if a match is found
}
}
}, 1000);
}