Link to home
Start Free TrialLog in
Avatar of savsoft
savsoftFlag for India

asked on

Need timmer code in java script

I have time value in post like :
$ti=$_POST['ti']

and assume $ti equal to 5 min

i need some code which continuous show decreasing time like:
4.59 min after second 4.58 ........ so on

i have some code but it shows time in seconds and use input field...
please help..
Avatar of Samuel Liew
Samuel Liew
Flag of Australia image


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
//<![CDATA[
var time = null;
window.onload = function() {
	timerDisplay = document.getElementById('timer');
	time = parseFloat(timerDisplay.innerHTML);
	time = isNaN(time)?5:time; // default time
	timerDisplay.innerHTML = time.toFixed(2).replace('.', ':');
	setInterval(countdown, 1000);
}
function countdown() {
	if(time > 0.01) {
		time -= 0.01;
		if(time > 1 && time%1 > 0.59) time = Math.floor(time) + 0.59;
		timerDisplay.innerHTML = time.toFixed(2).replace('.', ':');
	} else timerDisplay.innerHTML = "0:00";
}
//]]>
</script>
</head>

<body>
Time left: <span id="timer"><?= $ti ?></span>
</body>
</html>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Samuel Liew
Samuel Liew
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Marco Gasi
I'm sorry, but sam2912's code doesn't work entirely because it not allows to get $ti value. Using window.onload, your script run before $ti value is getted so countdown will start always from 5, the default value. I made a little modification posted in code snippet below.

Hope this helps

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
//<![CDATA[
var time = null;
function start() {
	timerDisplay = document.getElementById('timer');
	time = parseFloat(timerDisplay.innerHTML);
//	time = isNaN(time)?5:time; // default time // commented because not useful
	timerDisplay.innerHTML = time.toFixed(2).replace('.', ':');
	setInterval(countdown, 1000);
}
function countdown() {
	if(time > 0.01) {
		time -= 0.01;
		if(time%1 > 0.59) time = Math.floor(time) + 0.59;
		timerDisplay.innerHTML = time.toFixed(2).replace('.', ':');
	} else timerDisplay.innerHTML = "0:00";
}
//]]>
</script>
</head>

<body>
<?php
    if (isset($_REQUEST['ti'])){
        $ti = $_REQUEST['ti'];
    }else{
        $ti = 5;
    }
    echo "Time left: <span id='timer'>$ti</span>";
?>
    
<?php
echo "<br><br>INSOMMA $ti<BR>";
    echo "<script type='text/javascript'>start();</script>";
?>
</body>
</html>

Open in new window

Someone can tell me why in my test the sam2912's script didn't get $ti value and always countdfown started from 5?
This only because I would understand where is my error, if one error I made... Thanks
<?= $ti ?> is a PHP variable printed into the span. It should be a positive number. Otherwise, the code will not be able to parse the value, and will take 5 as the default.
Thank,sam. But I wrote:

<?php
    if (isset($_REQUEST['ti'])){
        $ti = $_REQUEST['ti'];
    }
?>

leaving your code untouched. Then, if I typed http://localhost/countdown.php?ti=10 countdown didn't start from 10 but from 5. This is what I don't understand. I post the entire code I tried: it doesn't work. Bye
<?php
    if (isset($_REQUEST['ti'])){
      $ti = $_REQUEST['ti'];
    
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
//<![CDATA[
var time = null;
window.onload = function() {
	timerDisplay = document.getElementById('timer');
	time = parseFloat(timerDisplay.innerHTML);
	time = isNaN(time)?5:time; // default time
	timerDisplay.innerHTML = time.toFixed(2).replace('.', ':');
	setInterval(countdown, 1000);
}
function countdown() {
	if(time > 0.01) {
		time -= 0.01;
		if(time%1 > 0.59) time = Math.floor(time) + 0.59;
		timerDisplay.innerHTML = time.toFixed(2).replace('.', ':');
	} else timerDisplay.innerHTML = "0:00";
}
//]]>
</script>
</head>

<body>
Time left: <span id="timer"><?= $ti ?></span>
</body>
</html>

Open in new window

Avatar of savsoft

ASKER

I have added <?php $ti;?>

in line no 17 of sam2912

time = isNaN(time)?<?php $ti;?>:time; // default time
in that case you can remove these two lines of code:

        time = parseFloat(timerDisplay.innerHTML);
        time = isNaN(time)?5:time; // default time

and replace with

        time = <?= php $ti; ?>;
Thank savsoft: this makes clear all things for me.
Avatar of savsoft

ASKER

i have some problem.

i want to send time at any instant by click on form submit button.

some thing like this:

<input type="hidden" name="instant_time" value="<span id="timer"><?= $ti ?></span>">


please help me...
Honestly you should open a new question: two months are past from the closing this question, the problem is not the same (it's only related to the original one) and here you can't give points for new solution.

However, you can try this:

<input type="hidden" name="instant_time" value="<span id="timer"><?php= $ti ?></span>">

try

<input type="hidden" name="instant_time" value="<?php= $ti ?>">

Cheers
Avatar of savsofts
savsofts

it doesn't work for less then 8 minutes