GeoDude
GeoDude

Reputation: 35

Trouble with .getTime()

I am fairly new to HTML and Javascript, so I'm trying to make a small incremental game as practice. This is the code I am trying to use to calculate the automatic gains / second, as well as adjust accordingly for when the tab isn't in focus and setInterval stops running.

var startTime = new Date();
var endTime = new Date();
var interval = 100;


window.setInterval(function(){
startTime.getTime();
var timeDiff = startTime - endTime;

do{
document.getElementById('woodAmount').innerHTML =  Math.floor(user.wood += (user.WPS/10));
document.getElementById('oilAmount').innerHTML =  Math.floor(user.oil += (user.OPS/10)); 
document.getElementById('goldAmount').innerHTML =  Math.floor(user.gold += (user.GPS/10));
document.getElementById('coalAmount').innerHTML = Math.floor(user.coal += (user.CPS/10));
timeDiff -= interval;
}while (timeDiff >= interval);

endTime.getTime();
}, interval);

For some reason, this code doesn't adjust for the time when the tab is not focused, but it works as expected when it is in focus.
As you can see here, I set the interval to 100 milliseconds, and I divide the resources / second (user.WPS) by 10.

However, when I set the interval to 1 second (1000 milliseconds) and don't divide the resources / second by 10, it works as expected all the time, and properly adjusts for the time that the tab isn't focused.
Can anyone offer an explanation as to why it works when using full-second intervals, but won't when using 100 millisecond intervals?

Upvotes: 1

Views: 826

Answers (1)

jfriend00
jfriend00

Reputation: 707158

.getTime() gets the time that is already in the Date object at the time it was created or whenever the time was last set in the date object. It does NOT get the current time.

If you want to get the current time, I often use this little function:

function now() {
   return new Date().getTime();
}

Or, if you don't need IE8 support, then you can use Date.now().

In addition, the getTime() method pulls the time out of the data object and returns it from that method call. If you want to use it, you have to put it somewhere after calling .getTime().

Upvotes: 3

Related Questions