Re: [PHP] difference between two times? Date_diff and DateTime::diff

[email protected] ("Ian")
Newsgroups php.general
Organization Fish.Net Ltd
Message-ID <4A37C650.31029.6B20926@php_list.FishNet.co.uk>
On 16 Jun 2009 at 14:05, Matthew Croud wrote:

> Hi Dajve and Tom,
> 
> Thanks again, I totally didn't realise that this function is yet to be  
> implemented in the mainstream PHP,
> 
> So is there no function that exists in vanilla PHP that can take two  
> dates/times and supply the difference ?
> If there isn't I do apologise, i've been talking to my friend who does  
> ASP.net and he said he was sure there is for PHP.

Hi,

This is a quick function that works using unix time stamps.  Its a bit quick and messy but 
works ok.  Take a look at the manual page for the strtotime() function to get a better idea 
of what it can handle.

<?

$Date1_UnixTimeStamp=strtotime("10:10:45");
$Date2_UnixTimeStamp=strtotime("12:45:03");

print_r(DateDiff( $Date1_UnixTimeStamp, $Date2_UnixTimeStamp));

function DateDiff( $Date1_UnixTimeStamp, $Date2_UnixTimeStamp){
	
	$return_difference	= Array(
		"Days"		=>	0,
		"Hours"		=>	0,
		"Minutes"	=>	0,
		"Seconds"	=>	0
	);
	
	$amounts	= Array(
		"Days"		=>	60*60*24,
		"Hours"		=>	60*60,
		"Minutes"	=>	60
	);
	
	$difference = $Date2_UnixTimeStamp - $Date1_UnixTimeStamp;
	
	if($difference >= $amounts["Days"]){
		$return_difference["Days"] = floor($difference / $amounts["Days"]);
		$difference -=  $return_difference["Days"] * $amounts["Days"];
	}
	
	if($difference >= $amounts["Hours"]){
		$return_difference["Hours"] = floor($difference / $amounts["Hours"]);
		$difference -=   $return_difference["Hours"] * $amounts["Hours"];
	}
	if($difference >= $amounts["Minutes"]){
		$return_difference["Minutes"] = floor($difference / $amounts["Minutes"]);
		$difference -=  $return_difference["Minutes"] * $amounts["Minutes"];
	}
	
	$return_difference["Seconds"] = $difference;
	
	return $return_difference;
}

?>

Regards

Ian
-- 



> On 16 Jun 2009, at 13:11, Dajve Green wrote:
> 
> >
> > Hi Matthew,
> >
> > A quick note on the DateTime::diff() method - it's only available as  
> > from
> > PHP 5.3, which is currently in release candidate stage, meaning  
> > unless you
> > have your own server running PHP, it won't be available to use  
> > (hopefully -
> > I would be sceptical of any webhost which rolls out RCs on production
> > servers).
> >
> > If you need to know what version of PHP you're running, use:
> > phpversion() or phpinfo()
> >
> >> -----Original Message-----
> >> From: Matthew Croud [mailto:[email protected]]
> >> Sent: 16 June 2009 12:42
> >> To: Tom Chubb
> >> Cc: PHP General list
> >> Subject: Re: [PHP] difference between two times? Date_diff and
> >> DateTime::diff
> >>
> >> Hi Tom,
> >>
> >> Thanks for the reply,  I believe I have a fair understanding of
> >> functions, and I have followed the example on the PHP manual page (
> >> http://uk3.php.net/manual/en/function.date-diff.php
> >>  ), ideally I want to know how to use the class DateTime::diff, how
> >> can I use the DateTime::diff to get the difference between two times/
> >> dates ? I suppose then I'm after the syntax
> >>
> >> would it be like this for example:
> >> $DIfferenceInTime  = DateTime::diff(10:00,12:32);
> >>
> >> Thanks again for helping me out.
> >>
> >>
> >>
> >> On 16 Jun 2009, at 12:33, Tom Chubb wrote:
> >>
> >>> Matt,
> >>> Do you understand how to use functions?
> >>> A function is defined like this:
> >>>
> >>> function () {
> >>> //code goes here
> >>> }
> >>>
> >>> You can pass arguments to be used in a function like this:
> >>>
> >>> function($arg1, $arg2) {
> >>> //code goes here
> >>> }
> >>>
> >>> In the first example on the following page:
> >> http://uk3.php.net/manual/en/function.date-diff.php
> >>> To call the function you need to provide two arguments: $dtTime1 &
> >>> $dtTime2
> >>>
> >>> To use in a script, you need to first define the function, as per
> >>> the example:
> >>>
> >>> <?php
> >>>
> >>> function GetDeltaTime($dtTime1, $dtTime2)
> >>> {
> >>>  $nUXDate1 = strtotime($dtTime1->format("Y-m-d H:i:s"));
> >>>  $nUXDate2 = strtotime($dtTime2->format("Y-m-d H:i:s"));
> >>>
> >>>  $nUXDelta = $nUXDate1 - $nUXDate2;
> >>>  $strDeltaTime = "" . $nUXDelta/60/60; // sec -> hour
> >>>
> >>>  $nPos = strpos($strDeltaTime, ".");
> >>>  if (nPos !== false)
> >>>    $strDeltaTime = substr($strDeltaTime, 0, $nPos + 3);
> >>>
> >>>  return $strDeltaTime;
> >>> }
> >>>
> >>> ?>
> >>>
> >>> Then you need to call the function like this:
> >>>
> >>> <?php
> >>> GetDeltaTime("time1-goes-here", "time2-goes-here")
> >>> ?>
> >>>
> >>> And it should spit out the difference.
> >>>
> >>> Code is untested and if you didn't follow that I suggest you read up
> >>> on functions: http://www.w3schools.com/php/php_functions.asp
> >>>
> >>> Hope this helps - I'm probably in a similar situation to you and
> >>> have been dabbling with PHP for a few years just as a hobby but
> >>> thought I'd try and help out.
> >>> You'll learn a lot from reading this list as well.
> >>>
> >>> Cheers and good luck,
> >>>
> >>> Tom
> >>>
> >>>
> >>> 2009/6/16 Matthew Croud <[email protected]>
> >>>
> >>> Hello,
> >>>
> >>> My journey of learning PHP is going well, so i've decided to make a
> >>> small program which works out the difference between two times and
> >>> records the data in a text file.
> >>>
> >>> I've searched the PHP manual for functions which can help me out,
> >>> and I discovered the function Date_diff (
> >> http://uk3.php.net/manual/en/function.date-diff.php
> >>> )and the class DateTime::diff (
> >> http://uk3.php.net/manual/en/datetime.diff.php
> >>> )
> >>>
> >>> My question is, how on earth do I use these functions ? I really
> >>> don't understand the manual documentation.
> >>>
> >>> I've just moved onto the subject of classes and so I'm fairly new to
> >>> the concept, although I am following it well.
> >>>
> >>> If someone could explain to me how to use ether of these ( Date_diff
> >>> and DateTime::diff ) I would be VERY grateful.
> >>>
> >>> Thank you so much!
> >>> Matt
> >>>
> >>> --
> >>> PHP General Mailing List (http://www.php.net/)
> >>> To unsubscribe, visit: http://www.php.net/unsub.php
> >>>
> >>>
> >>>
> >>>
> >>
> >> Matthew Croud
> >> Studio
> >>
> >> Obvious Print Solutions Limited
> >> Unit 3 Abbeygate Court
> >> Stockett Lane
> >> Maidstone
> >> Kent
> >> ME15 0PP
> >>
> >> T | 0845 094 9704
> >> F | 0845 094 9705
> >> www.obviousprint.com
> >>
> >>
> >>
> >>
> >
> >
> >
> > -- 
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> 
> Matthew Croud
> Studio
> 
> Obvious Print Solutions Limited
> Unit 3 Abbeygate Court
> Stockett Lane
> Maidstone
> Kent
> ME15 0PP
> 
> T | 0845 094 9704
> F | 0845 094 9705
> www.obviousprint.com
> 
> 
> 
> 
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.