note 115346 added to function.date-diff

From: Date: Tue, 08 Jul 2014 09:47:21 +0000
Subject: note 115346 added to function.date-diff
Groups: php.notes 
Request: Send a blank email to php-notes+get-199896@lists.php.net to get a copy of this message
Easy to use function slightly changed from Sergio Abreu's function with backwards compatibility (PHP < 5.3.0) <?php /** * mathematical decimal difference between two informed dates * Features: * Automatic conversion on dates informed as string. * Possibility of absolute values (always +) or relative (-/+) * * @param char $str_interval y=year, m=month, d=day, h=hour, i=minute, s=second * @param DateTime/string $dt_earlier first timestamp * @param DateTime/string $dt_later second timestamp * @param bool $relative if set to true, function will always return a positive value regardless of the order of time of timestamps * @returns float signed or unsigned depending on $relative */ function s_datediff( $str_interval, $dt_earlier, $dt_later, $relative=false){ if (function_exists('date_create')) { if( is_string( $dt_earlier)) $dt_earlier = date_create( $dt_earlier); if( is_string( $dt_later)) $dt_later = date_create( $dt_later); $diff = date_diff( $dt_earlier, $dt_later, ! $relative); } else { if( is_string( $dt_earlier)) $uts_earlier = strtotime($dt_earlier); if( is_string( $dt_later)) $uts_later = strtotime( $dt_later); $diff = new stdClass(); $diff->y = date('Y',$uts_later) - date('Y',$uts_earlier); $diff->m = date('m',$uts_later) - date('m',$uts_earlier); $diff->d = date('d',$uts_later) - date('d',$uts_earlier); $diff->h = date('H',$uts_later) - date('H',$uts_earlier); $diff->i = date('i',$uts_later) - date('i',$uts_earlier); $diff->s = date('s',$uts_later) - date('s',$uts_earlier); $diff->invert = ($uts_later > $uts_earlier); } switch( $str_interval){ case "y": $total = $diff->y + $diff->m / 12 + $diff->d / 365.25; break; case "m": $total= $diff->y * 12 + $diff->m + $diff->d/30 + $diff->h / 24; break; case "d": $total = $diff->y * 365.25 + $diff->m * 30 + $diff->d + $diff->h/24 + $diff->i / 60; break; case "h": $total = ($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h + $diff->i/60; break; case "i": $total = (($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h) * 60 + $diff->i + $diff->s/60; break; case "s": $total = ((($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h) * 60 + $diff->i)*60 + $diff->s; break; } if( $diff->invert) return -1 * $total; else return $total; } $earlier = '2013-06-07 11:30:00'; $later = '2012-07-08 12:30:00'; $diffl = 'm'; echo '<br><br><br> diff of '.$later.' and '.$earlier.' is '. s_datediff($diffl,$earlier, $later,true) .' in '.$diffl.'<br>'; //output //diff of 2012-07-08 12:30:00 and 2013-06-07 11:30:00 is -11.925 in m echo '<br><br><br> diff of '.$later.' and '.$earlier.' is '. s_datediff($diffl,$earlier, $later,false) .' in '.$diffl; //output //diff of 2012-07-08 12:30:00 and 2013-06-07 11:30:00 is 11.925 in m ?> ---- Server IP: 72.52.91.14 Probable Submitter: 82.222.143.240 ---- Manual Page -- http://php.net/manual/en/function.date-diff.php Edit -- https://master.php.net/note/edit/115346 Del: integrated -- https://master.php.net/note/delete/115346/integrated Del: useless -- https://master.php.net/note/delete/115346/useless Del: bad code -- https://master.php.net/note/delete/115346/bad+code Del: spam -- https://master.php.net/note/delete/115346/spam Del: non-english -- https://master.php.net/note/delete/115346/non-english Del: in docs -- https://master.php.net/note/delete/115346/in+docs Del: other reasons-- https://master.php.net/note/delete/115346 Reject -- https://master.php.net/note/reject/115346 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#199896) next »