Самым простым способом, которым я мог видеть, как вы это делаете, был объект, в котором каждое действие было сохранено во время. Я решил использовать <HOUR><MINUTE>
для хранения каждого значения. Так что время 4:12 вечера будет: 1612
. Затем setInterval
запускается каждую минуту и проверяет, нужно ли ему выполнить новое действие.
function hello() {
console.log('Hello');
}
let actions = {
"0630": function() {
console.log('Its 6:30');
},
"1200": hello, //NOON
"1400": hello, //2:00 PM
"0000": function() {
console.log('New Day / Midnight');
},
};
let codeStartTime = new Date();
function checkActions() {
let date = new Date();
let action = actions[`${date.getHours() >= 10 ? "" : "0"}${date.getHours()}${date.getMinutes() >= 9 ? "" : "0"}${date.getMinutes()}`];
if (typeof action === "function") action(); //If an action exists for this time, run it.
}
setTimeout(function() {
checkActions();
setInterval(checkActions, 60000); //Run the function every minute. Can increase/decrease this number
}, ((60 - codeStartTime.getSeconds()) * 1000) - codeStartTime.getMilliseconds()); // Start the interval at the EXACT time it starts at a new minute
/** CODE for the Stack Overflow Snippet **/
console.log(`Starting first interval in ${((60 - codeStartTime.getSeconds()))} seconds.`);
console.log(`Adding in StackOverflow function, set to run at: ${codeStartTime.getHours() >= 10 ? "" : "0"}${codeStartTime.getHours()}${codeStartTime.getMinutes() >= 9 ? "" : "0"}${codeStartTime.getMinutes() + 1}`);
actions[`${codeStartTime.getHours() >= 10 ? "" : "0"}${codeStartTime.getHours()}${codeStartTime.getMinutes() >= 9 ? "" : "0"}${codeStartTime.getMinutes() + 1}`] = function() {
console.log('Ran the StackOverflow Function');
};
Если вы решите, вы можете подождать любое из моих примеров в объекте actions
, чтобы доказать, что оно работает. Но код StackOverflow просто добавляет время выборки к вашему текущему времени +1 минута в объекте actions
, чтобы было проще увидеть его в действии. Используется
setInterval
здесь просто, но не очень рекомендуется, если это будет работать весь день. Причина, по которой . Чтобы иметь более точное время , я предлагаю заменить setInterval
на setTimeout
и просто переопределять setTimeout
при каждом его запуске.