Je suis tombé sur ceci lorsque j'ai essayé de déconnecter automatiquement un utilisateur dont la session a expiré. Ma solution a été de réinitialiser le délai d'expiration après un jour, et de conserver la fonctionnalité permettant d'utiliser clearTimeout.
Voici un petit exemple de prototype :
Timer = function(execTime, callback) {
if(!(execTime instanceof Date)) {
execTime = new Date(execTime);
}
this.execTime = execTime;
this.callback = callback;
this.init();
};
Timer.prototype = {
callback: null,
execTime: null,
_timeout : null,
/**
* Initialize and start timer
*/
init : function() {
this.checkTimer();
},
/**
* Get the time of the callback execution should happen
*/
getExecTime : function() {
return this.execTime;
},
/**
* Checks the current time with the execute time and executes callback accordingly
*/
checkTimer : function() {
clearTimeout(this._timeout);
var now = new Date();
var ms = this.getExecTime().getTime() - now.getTime();
/**
* Check if timer has expired
*/
if(ms <= 0) {
this.callback(this);
return false;
}
/**
* Check if ms is more than one day, then revered to one day
*/
var max = (86400 * 1000);
if(ms > max) {
ms = max;
}
/**
* Otherwise set timeout
*/
this._timeout = setTimeout(function(self) {
self.checkTimer();
}, ms, this);
},
/**
* Stops the timeout
*/
stopTimer : function() {
clearTimeout(this._timeout);
}
};
Utilisation :
var timer = new Timer('2018-08-17 14:05:00', function() {
document.location.reload();
});
Et vous pouvez l'effacer avec le stopTimer
méthode :
timer.stopTimer();
1 votes
Parce que c'est limité à 32 bits, ce qui est 2 puissance 32. Si vous le calculez, vous obtenez 4294967296. Maintenant, vous avez besoin du premier bit pour décider si c'est un nombre négatif ou positif. On obtient donc 2 puissance 31 et la moitié de 4294967296, soit 2147483648. Mais zéro est un nombre positif, donc 2147483647.