Posted under » PHP » JavaScript on 21 June 2024
I have issues when using a timer using solely javascript because it only works when your browser is active and you are looking at it.
I already did a countdown using php but it is static and the refresh wasn't elegant. In addition, I would like to have the determine the time the timer will stop just like my Casio watch or a stopwatch.
Here is timer.php code
<¿php
if (isset($hour)) {$hour = date("H"); } else {$hour = $_GET["h"]; }
if (isset($minit)) {$minit = date("i"); } else {$minit = $_GET["m"]; }
$currentdatetime = date("Y-m-d H:i:s");
$hari = date("Y-m-d");
$jam = date($hour.":".$minit.":00");
$eventDate = $hari." ".$jam;
$currentTimestamp = time();
$eventTimestamp = strtotime($eventDate);
$eventTimesetamp = $eventTimestamp;
if ($eventTimesetamp > $currentTimestamp) {
$timeRemaining = $eventTimesetamp - $currentTimestamp;
$hours = floor($timeRemaining / 3600);
$minutes = floor(($timeRemaining % 3600) / 60);
$seconds = $timeRemaining % 60;
echo "Time remaining: {$hours} hours, {$minutes} minutes, {$seconds} seconds";
} else {
echo "Event has already occurred. <p>Current time : ".$currentTimestamp."<p>Event timestamp : ".$jam ;
}
?>
You need to define the h and m parameter via URL... eg. timer.php?h=8&m=35 for example.
For showing the current time you need to refesh the element every second. We need to do this for the timer.php code too. I have the following refresh calls to JS functions.
setInterval(casio, 1000); setInterval(loadPage, 2000);
This will get the hr and minute parameters
function hurl(hr,min) {
gfurl = 'timer.php?h=' + hr + '&m=' + min ;
console.log("global value of url is: ", gfurl);
}
In javascript, you use var for variables inside a function but if in this 'gfurl' example, it will be a global variable. I need gfurl to be global in order to use inside the loadPage function. This is loadPage is refreshed every 2 seconds. Casio is the clock.
citizen is to get the hour and minute to make it easier to input the event time. I load it once instead of every second by <body onload="citizen()">
function loadPage() {
const flickr = document.getElementById('flickr');
// fetch('timer.php?h=8&m=20')
fetch(gfurl)
.then(response => response.text())
.then(html => {
flickr.innerHTML = html;
})
.catch(error => {
console.log(error);
});
}
function citizen() {
const asr = new Date();
let h = asr.getHours();
let m = asr.getMinutes();
document.getElementById("jam").value = h;
document.getElementById("minit").value = m;
hurl(h,m);
}
function casio() {
const date = new Date();
document.getElementById("clock").innerHTML = date.toLocaleTimeString();
}
The most important thing to note is the fetch command which fetches the contents of `gfurl' and we use it to show the contents every 2 seconds. The following is the rest of the HTML which is self-explanatory.
<body onload="citizen()">Timer
<p>Time : <span id="clock"> <¿php echo '<div id="flickr">'; echo $meh; echo "</div>"; ?> <div id="form"> <p>
<button onclick="hurl(document.getElementById('jam').value,document.getElementById('minit').value)">capture it</button> </div> <p>Show | Hide
If you don't like to see the clutter and want to hide the form, you can hide it.
Roughly, it will look like this