note 51079 deleted from ref.datetime by felipe

From: Date: Mon, 10 Dec 2007 17:45:42 +0000
Subject: note 51079 deleted from ref.datetime by felipe
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-133197@lists.php.net to get a copy of this message
Note Submitter: datavortex at gmail dot com ---- This is a litttle function I cobbled together from my own code, and snippets from this site to calculate the difference between two datetimes without having to confine it to simply one interval. This will tell you how many weeks, days, hours, minutes, and seconds there are between the given datetimes, and also makes a little English string you can use. This could easily be expanded to include months, and years, but I didn't want to have to deal with any of the leap year and variable month length stuff. <? function dateDiff($dateTimeBegin,$dateTimeEnd) { $dateTimeBegin =strtotime($dateTimeBegin); $dateTimeEnd =strtotime($dateTimeEnd); if($dateTimeEnd === -1 || $dateTimeBegin === -1) { # error condition return false; } $diff = $dateTimeEnd - $dateTimeBegin; if ($diff < 0) { # error condition return false; } $weeks = $days = $hours = $minutes = $seconds = 0; # initialize vars if($diff % 604800 > 0) { $rest1 = $diff % 604800; $weeks = ($diff - $rest1) / 604800; # seconds a week if($rest1 % 86400 > 0) { $rest2 = ($rest1 % 86400); $days = ($rest1 - $rest2) / 86400; # seconds a day if( $rest2 % 3600 > 0 ) { $rest3 = ($rest2 % 3600); $hours = ($rest2 - $rest3) / 3600; # seconds an hour if( $rest3 % 60 > 0 ) { $seconds = ($rest3 % 60); $minutes = ($rest3 - $seconds) / 60; # seconds a minute } else { $minutes = $rest3 / 60; } } else { $hours = $rest2 / 3600; } } else { $days = $rest1/ 86400; } }else { $weeks = $diff / 604800; } $string = array(); if($weeks > 1) { $string[] = "$weeks weeks"; } elseif ($weeks == 1) { $string[] = "a week"; } if($days > 1) { $string[] = "$days days"; } elseif($days == 1) { $string[] = "a day"; } if($hours > 1) { $string[] = "$hours hours"; } elseif ($hours == 1) { $string[] = "an hour"; } if($minutes > 1) { $string[] = "$minutes minutes"; } elseif ($minutes == 1) { $string[] = "a minute"; } if($seconds > 1) { $string[] = "$seconds seconds"; } elseif($seconds == 1) { $string[] = "a second"; } # join together all the strings in the array above except the last element $text = join(', ', array_slice($string,0,sizeof($string)-1)) . ", and "; $text .= array_pop($string); # put the last one on after the and return array($text, $weeks, $days, $hours, $minutes, $seconds); ?>

« previous php.notes (#133197) next »