Find Difference between two dates in PHP

By David Sklar Viewed: 31787 times Emailed: 187 times Printed: 170 times Bookmark and Share



You want to find the elapsed time between two dates. For example, you want to tell a user how long it's been since she last logged onto your site.

Convert both dates to epoch timestamps and subtract one from the other. Use this code to separate the difference into weeks, days, hours, minutes, and seconds:

// 7:32:56 pm on May 10, 1965
$epoch_1 = mktime(19,32,56,5,10,1965);
// 4:29:11 am on November 20, 1962
$epoch_2 = mktime(4,29,11,11,20,1962);

$diff_seconds  = $epoch_1 - $epoch_2;
$diff_weeks    = floor($diff_seconds/604800);
$diff_seconds -= $diff_weeks   * 604800;
$diff_days     = floor($diff_seconds/86400);
$diff_seconds -= $diff_days    * 86400;
$diff_hours    = floor($diff_seconds/3600);
$diff_seconds -= $diff_hours   * 3600;
$diff_minutes  = floor($diff_seconds/60);
$diff_seconds -= $diff_minutes * 60;

print "The two dates have $diff_weeks weeks, $diff_days days, ";
print "$diff_hours hours, $diff_minutes minutes, and $diff_seconds ";
print "seconds elapsed between them.";
The two dates have 128 weeks, 6 days, 14 hours, 3 minutes, 
and 45 seconds elapsed between them.

Note that the difference isn't divided into larger chunks than weeks (i.e., months or years) because those chunks have variable length and wouldn't give an accurate count of the time difference calculated.

There are a few strange things going on here that you should be aware of. First of all, 1962 and 1965 precede the beginning of the epoch. Fortunately, mktime() fails gracefully here and produces negative epoch timestamps for each. This is okay because the absolute time value of either of these questionable timestamps isn't necessary, just the difference between the two. As long as epoch timestamps for the dates fall within the range of a signed integer, their difference is calculated correctly.

Next, a wall clock (or calendar) reflects a slightly different amount of time change between these two dates, because they are on different sides of a DST switch. The result subtracting epoch timestamps gives is the correct amount of elapsed time, but the perceived human time change is an hour off. For example, on the Sunday morning in April when DST is activated, what's the difference between 1:30 A.M. and 4:30 A.M.? It seems like three hours, but the epoch timestamps for these two times are only 7,200 seconds apart — two hours. When a local clock springs forward an hour (or falls back an hour in October), the steady march of epoch timestamps takes no notice. Truly, only two hours have passed, although our clock manipulations make it seem like three.

If you want to measure actual elapsed time (and you usually do), this method is fine. If you're more concerned with the difference in what a clock says at two points in time, use Julian days to compute the interval.

To tell a user the elapsed time since her last login, you need to find the difference between the login time and her last login time:

$epoch_1 = time();
$r = mysql_query("SELECT UNIX_TIMESTAMP(last_login) AS login 
                 FROM user WHERE id = $id") or die();
$ob = mysql_fetch_object($r);
$epoch_2 = $ob->login;

$diff_seconds  = $epoch_1 - $epoch_2;
$diff_weeks    = floor($diff_seconds/604800);
$diff_seconds -= $diff_weeks   * 604800;
$diff_days     = floor($diff_seconds/86400);
$diff_seconds -= $diff_days    * 86400;
$diff_hours    = floor($diff_seconds/3600);
$diff_seconds -= $diff_hours   * 3600;
$diff_minutes  = floor($diff_seconds/60);
$diff_seconds -= $diff_minutes * 60;

print "You last logged in $diff_weeks weeks, $diff_days days, ";
print "$diff_hours hours, $diff_minutes minutes, and $diff_seconds ago.";



Comments(0)


Be the first one to add a comment

Your name (required):


Your email(required, will not be shown to the public):


Your sites URL (optional):


Your comments:


Enter Code:
The Captcha image

Latest Tutorials

[2010-07-03]A Basic Example using PHP in AWS (Amazon Web Services)
[2010-07-03]Building a Video Sharing Site using PHP in AWS
[2010-06-30]XMLRPC for PHP - A simple client and server program
[2010-06-29]How to fix: Warning: Visiting this site may harm your computer - domainameat.cc
[2009-06-13]PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/php4/lib/php/extensions/no-debug ......
[2009-02-24]Using Text file as database in PHP
[2009-02-07]Parent: child process exited with status 3221225477 -- Restarting
[2009-01-14]Install and use PHPUnit to test your PHP pages for errors.
[2008-12-29]Using Codeigniter for PHP application development
[2008-12-01]Creating or Opening a File in PHP
[2008-12-01]Opening a Remote File in PHP
[2008-12-01]Reading contents of a File into a String in PHP
[2008-12-01]Counting Lines, Paragraphs, or Records in a File using pc_split_paragraphs() in PHP
[2008-12-01]Reading word by word from a file in PHP
[2008-12-01]Reading .ini files in PHP

More Latest News

Most Viewed Articles (in last 30 days)
isset() function in PHP
Reading .CSV file in PHP
Parent: child process exited with status 3221225477 -- Restarting
Handling BLOB in PHP and MySQL
Extract files from a .zip file using PHP
Find Difference between two dates in PHP
preg_split() and explode() in PHP
Upload and Download files with FTP in PHP
Install and use PHPUnit to test your PHP pages for errors.
public, protected, and private Properties in PHP
preg_match(), function preg_match_all(), preg_grep() in PHP
Appending One Array to Another in PHP
Reading and Writing .gz files in PHP
Reading word by word from a file in PHP
preg_replace() and preg_replace_callback() in PHP
Most Emailed Articles (in last 30 days)
Opening a Remote File in PHP
Reading .CSV file in PHP
Counting Lines, Paragraphs, or Records in a File using pc_split_paragraphs() in PHP
Reading word by word from a file in PHP
Removing Duplicate Elements from an Array in PHP
Reading contents of a File into a String in PHP
Find Difference between two dates in PHP
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/php4/lib/php/extensions/no-debug ......
isset() function in PHP
Setting cookies in PHP
.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable
Different versions of PHP - History and evolution of PHP
Traversing Arrays Using list() and each() in PHP
Creating or Opening a File in PHP
Extract files from a .zip file using PHP