Luke Skywalker
Luke Skywalker

Reputation: 17

Keep Time Value after closing the browser and calls it again - Javascript?

I asked yesterday about saving a timer value when the browser closes and then start counting again when the user opens it. I've found that using cookies must be a good solution, so i've added the set and getcookie functions, but still i can't get my timer values. This might be easy, but i cant see what's wrong because i'm still too noob in javascript. Does someone know what i'm doing wrong? thank you!! here's the code i have so far:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
    <title>Test</title>
    <script type="text/javascript">
var sec = 0;
var min =  0;
var hr = 0;
var dias = 0;
var bool = true;
function stopwatch() {
        sec++;
        if (sec == 60) {
            sec = 0;
            min += 1;
        }

        if (min == 60) {
            min = 0;
            hr += 1;
        }

        if (hr == 24) {
            hr = 0;
            dias += 1;
        }

        totalTime = ((dias<=9) ? "0" + dias : dias) + "d, " + ((hr<=9) ? "0" + hr : hr) + " : " + ((min<=9) ? "0" + min : min) + " : " + ((sec<=9) ? "0" + sec : sec);
        document.getElementById("timer").innerHTML = totalTime;
        if (bool == true) {
        start = setTimeout("stopwatch()", 1000);

        }
    }

function setCookie(name, value, expires) {
document.cookie = name + "=" + escape(value) + "; path=/" + ((expires == null) ? "" : "; expires=" + expires.toGMTString());
}



function getCookie (name) {
    var cname = name + "=";               
    var dc = document.cookie;

    if (dc.length > 0) {              
        begin = dc.indexOf(cname);       
            if (begin != -1) {           
            begin += cname.length;       
            end = dc.indexOf(";", begin);
                if (end == -1) end = dc.length;
                return unescape(dc.substring(begin, end));
            } 
        }
    return null;
}


var exp = new Date();                                  
exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30));

    </script>
</head>
<body onload="stopwatch()">
    <div id="timer" name="timer"> </div>
  <button onclick="bool = false"; > pause </button>
  <button onclick="bool = true;stopwatch();" > resume </button>

    <form>
      <input type="button" value="Set a Cookie" onClick="setCookie('myCookie',timer.value, exp)">
    </form>
<form>
<input type="button" value="Get Cookie Value" onClick="this.form.tf.value = getCookie('myCookie')">
<input type="text" name="tf" size="30">
</form>

 </body>
</html>

Upvotes: 1

Views: 439

Answers (2)

Cameron Martin
Cameron Martin

Reputation: 6012

Firstly, few issues with your code:

  • Strings shouldn't be used in setTimeouts
  • Your variables should be initialised as integers, not strings.

Back to your problem, use the unload event to save a cookie with the current time when the user closes the page. Then when the user opens the page again, detect the cookie and continue from where you left off.

Upvotes: 1

zdebruine
zdebruine

Reputation: 3807

If you can't figure out how to pause it, what about getting the Date when the browser closes and then getting the date when it opens again. Calculate the difference and subtract it from the value your timer is at.

I'm just throwing a general idea out there! :D

Upvotes: 0

Related Questions