-
-
Save teleclient/799e5793b0e2219aa67a0506cbc009df to your computer and use it in GitHub Desktop.
PHP: UNIX Date Difference calculations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Date Difference calculations for UNIX time stamps and Dates | |
*/ | |
// Set timezone | |
date_default_timezone_set("UTC"); | |
// Time format is UNIX timestamp or | |
// PHP strtotime compatible strings | |
function dateDiff($time1, $time2, $precision = 6) { | |
// If not numeric then convert texts to unix timestamps | |
if (!is_int($time1)) { | |
$time1 = strtotime($time1); | |
} | |
if (!is_int($time2)) { | |
$time2 = strtotime($time2); | |
} | |
// If time1 is bigger than time2 | |
// Then swap time1 and time2 | |
if ($time1 > $time2) { | |
$ttime = $time1; | |
$time1 = $time2; | |
$time2 = $ttime; | |
} | |
// Set up intervals and diffs arrays | |
$intervals = array('year','month','day','hour','minute','second'); | |
$diffs = array(); | |
// Loop thru all intervals | |
foreach ($intervals as $interval) { | |
// Set default diff to 0 | |
$diffs[$interval] = 0; | |
// Create temp time from time1 and interval | |
$ttime = strtotime("+1 " . $interval, $time1); | |
// Loop until temp time is smaller than time2 | |
while ($time2 >= $ttime) { | |
$time1 = $ttime; | |
$diffs[$interval]++; | |
// Create new temp time from time1 and interval | |
$ttime = strtotime("+1 " . $interval, $time1); | |
} | |
} | |
$count = 0; | |
$times = array(); | |
// Loop thru all diffs | |
foreach ($diffs as $interval => $value) { | |
// Break if we have needed precission | |
if ($count >= $precision) { | |
break; | |
} | |
// Add value and interval | |
// if value is bigger than 0 | |
if ($value > 0) { | |
// Add s if value is not 1 | |
if ($value != 1) { | |
$interval .= "s"; | |
} | |
// Add value and interval to times array | |
$times[] = $value . " " . $interval; | |
$count++; | |
} | |
} | |
// Return string with times | |
return implode(", ", $times); | |
} | |
?> | |
<?php // USAGE #1 strtotime examples | |
echo dateDiff("2010-01-26", "2004-01-26") . "\n"; | |
echo dateDiff("2006-04-12 12:30:00", "1987-04-12 12:30:01") . "\n"; | |
echo dateDiff("now", "now +2 months") . "\n"; | |
echo dateDiff("now", "now -6 year -2 months -10 days") . "\n"; | |
echo dateDiff("2009-01-26", "2004-01-26 15:38:11") . "\n"; | |
?> | |
<?php // Unix timestamp + precision | |
echo dateDiff(time(), time()-1000000, 1) . "\n"; | |
echo dateDiff(time(), time()-1000000, 3) . "\n"; | |
echo dateDiff(time(), time()-1000000, 6) . "\n"; | |
?> | |
<?php // Converting text format back to UNIX timestamp example | |
$time1 = time(); | |
$time2 = $time1-10000000; | |
echo $diff = dateDiff($time1, $time2) . "\n"; | |
echo $time1 . "\n"; | |
echo strtotime(" +".$diff, $time2) . "\n"; | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment