peter Ojeda
asked on
Time difference
Hi I asked this question before, thought I had a working solution, but I'm back again. I have two time inputes, and want to be able to display the difference between the two on the form on a button click. the two text boxes are starttime1 and endtime1, and on a button click I want to display the time passed in a separate text box. How can I go about this?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi sorry you are right I forgot to add that part. I am attempting to find the number of minutes passed from start time to end time.
Here's a PHP solution. We create a user-defined function to compute the elapsed minutes between any two valid Date/Time strings.
Supported formats for Date/Time strings are here: http://php.net/manual/en/datetime.formats.php
Supported formats for Date/Time strings are here: http://php.net/manual/en/datetime.formats.php
<?php // demo/temp_ojeda.php
/**
* https://www.experts-exchange.com/questions/28981779/Time-difference.html
*
* https://www.experts-exchange.com/articles/20920/Handling-Time-and-Date-in-PHP-and-MySQL-OOP-Version.html
* Note: UTC does not observe daylight savings time, so the elapsed computations will be correct throughout the year.
*/
error_reporting(E_ALL);
echo '<pre>';
// DEFINE A FUNCTION TO COMPUTE ELAPSED MINUTES
function elapsed_minutes($alpha, $omega, $zone='UTC')
{
try
{
$tzone = new DateTimeZone($zone);
$date_alpha = new DateTime($alpha, $tzone);
$date_omega = new DateTime($omega, $tzone);
}
catch(Exception $e)
{
trigger_error($e->getMessage(), E_USER_WARNING);
return FALSE;
}
$elapsed = (int)round( ( $date_omega->format('U') - $date_alpha->format('U') ) / 60);
return $elapsed;
}
// USE THE FUNCTION
$alpha = "2:30:47pm";
$omega = "3:43:12pm";
var_dump( elapsed_minutes($alpha, $omega) );
$alpha = "Yesterday 2:30:47pm";
$omega = "3:43:12pm";
var_dump( elapsed_minutes($alpha, $omega) );
This may be a little better. It's a two-step solution. Using AJAX you can get the expressive power of the PHP supported date/time strings without having to write a lot of JavaScript code. You may want to add some sanity checks to this, but it seems to work OK if it's given useful inputs.
Test here: https://iconoun.com/demo/temp_peter_ojeda_client.php
Server-side script:
Test here: https://iconoun.com/demo/temp_peter_ojeda_client.php
Server-side script:
<?php // demo/temp_peter_ojeda_server.php
/**
* https://www.experts-exchange.com/questions/28981779/Time-difference.html
*
* https://www.experts-exchange.com/articles/20920/Handling-Time-and-Date-in-PHP-and-MySQL-OOP-Version.html
* Note: UTC does not observe daylight savings time, so the elapsed computations will be correct throughout the year.
*/
error_reporting(E_ALL);
// DEFINE A FUNCTION TO COMPUTE ELAPSED MINUTES
function elapsed_minutes($alpha, $omega, $zone='UTC')
{
try
{
$tzone = new DateTimeZone($zone);
$date_alpha = new DateTime($alpha, $tzone);
$date_omega = new DateTime($omega, $tzone);
}
catch(Exception $e)
{
return $e->getMessage();
}
$elapsed = (int)round( ( $date_omega->format('U') - $date_alpha->format('U') ) / 60);
return $elapsed;
}
// USE THE FUNCTION
echo elapsed_minutes( $_GET['alpha'], $_GET['omega'] );
Client-side script:<?php // demo/temp_peter_ojeda_client.php
/**
* https://www.experts-exchange.com/questions/28981779/Time-difference.html
*/
error_reporting(E_ALL);
// CREATE OUR WEB PAGE IN HTML5 FORMAT, USING HEREDOC SYNTAX
$htm = <<<HTML5
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style type="text/css">
/* STYLE SHEET HERE */
</style>
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function(){
$("#go").click(function(){
var alpha = $("input[name=alpha]").val();
var omega = $("input[name=omega]").val();
$.get("temp_peter_ojeda_server.php", {alpha:alpha, omega:omega}, function(resp){
$("input[name=lapse]").val(resp)
});
});
});
</script>
<title>HTML5 Page With jQuery in UTF-8 Encoding</title>
</head>
<body>
<noscript>Your browsing experience will be much better with JavaScript enabled!</noscript>
<p>Enter Start and End date/time strings, then <input id="go" type="button" value="click here" />
<br>
Start: <input name="alpha" /> End: <input name="omega" /> Elapsed Minutes: <input name="lapse" readonly />
</p>
</body>
</html>
HTML5;
// RENDER THE WEB PAGE
echo $htm;
HTH, ~Ray
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
@Julian: That's a good idea, but I don't know enough MomentJS to produce a practical solution with a code sample!
ASKER
Thankyou Julian MomentJs looks very helpful I will look more into that.
You are welcome.
Procedural
https://www.experts-exchange.com/articles/201/Handling-Date-and-Time-in-PHP-and-MySQL-Procedural-Version.html
Object-oriented
https://www.experts-exchange.com/articles/20920/Handling-Time-and-Date-in-PHP-and-MySQL-OOP-Version.html
If you want to do this on the client-side (in the browser without reference to PHP) you might use "Request attention" and ask a moderator to add the question to the JavaScript Zone.