odpalenie URL o konkretnej godzinie

0

Hej

chciałbym na razie osiągnąć coś takiego, że o konkretnej godzinie w konkretny dzień odpalić url ( potem to rozbuduje )

const axios = require('axios');

function getUrl(url){
	axios.get(url)
	  .then(response => {
	  	
	    console.log(response.data);	  

	  })
	  .catch(error => {
	    console.log(error);
	  });
}

var url = 'https://wp.pl';

setInterval(function () {
    var date = new Date();

    if (date.getDate() === 21 && date.getHours() === 18 && date.getMinutes === 56) {
        console.log('teraz');
        //getUrl(url);
    }
}, 1000)

odpalam to "node script.js"
nie wpadam w mój warunek z datą, godziną, minutą.
Dlaczego?
Czy może wymaga to modyfikacji by nie używać setInterval()?
Jakby ktoś z Was zrobił to lepiej?

1

Nie zwróciłeś uwagi na to, że mało kiedy taki warunek może być spełniony. Dlaczego? A no dlatego, że setInerval odmierza czas od ostatniego wykonania funkcji a nie co ileś czasu.
Przykład: funkcja wykonuje się przez 2ms, setInterval przyjmuje za czas 1000 ms. Wtedy masz przedziały czasowe w ms:
0 - 1000 ms - czeka
1000 - 1002 ms - wywołanie funkcji
1003 - 2003 ms - czeka
2003 - 2005 ms - wywołanie funkcji
... i tak dalej, to można policzyć samemu. Przy okazji w pętli zdarzeń serwera mogą dziać się inne rzeczy, przez które czas dla funkcji się wydłuża (np. iowait). Chodzi o to, że tu porównujesz czas co do milisekundy a taki przedział czasu łatwo zgubić z setInterval.
Lepsze rozwiązanie? CRON. Tu mechanizm działania jest inny i nie martwimy się o porównanie czasu.

1

Może niekoniecznie samego crona (do tego potrzeba maszyny, nad którą ma się pełno kontrolę, a nie zawsze można sobie na pozwolić, szczególnie w szufladowych projektach), ale praktycznie w każdym języku jest jakiś klon. JS nie jest wyjątkiem.

https://www.npmjs.com/package/node-cron

Edit: A tak swoją szosą to kod pewnie nie działa, bo brakuje nawiasów: date.getMinutes === 56

1 użytkowników online, w tym zalogowanych: 0, gości: 1