setTimeout с заданным временем в Node JS?

Учти это:

setTimeout(function(){...}, 1000);

Он запускает функцию через 1 секунду. Я был сбит с толку, если я хочу, чтобы функция запускалась в 08:30:00, но мой скрипт запускается только сейчас (Date.now()), как мне оценить миллисекунды до этого момента?


person Ali Bahaari    schedule 18.01.2021    source источник


Ответы (1)


Вам нужно будет создать дату, совпадающую с днем ​​доступа к странице, и установить временную часть этой даты на 8:30. Затем вы можете просто вычесть текущее время из этого времени, чтобы получить разницу в миллисекундах. Как только вы узнаете разницу, вы можете установить таймер для этой задержки.

let now = new Date();
console.log("Current time is: " + now.toLocaleTimeString()); 

let targetTime = new Date();
targetTime.setHours(20);    // 8 pm
targetTime.setMinutes(30);  // 30 minutes
targetTime.setSeconds(0);   // 0 seconds
console.log("Target time is: " + targetTime.toLocaleTimeString()); // 8:30 PM

let delay = targetTime - now; // Get difference in milliseconds
console.log(delay + " milliseconds (" + delay/1000 + " seconds, " + (delay/1000/60).toFixed(2) + " minutes"  + ") until 8:30");

setTimeout(function(){
  console.log("time's up!");
}, delay);

person Scott Marcus    schedule 18.01.2021
comment
Отличная помощь с отличным объяснением. Спасибо. - person Ali Bahaari; 19.01.2021