Note that there are some explanatory texts on larger screens.

plurals
  1. POPHP - TimeSpan From DateTime
    text
    copied!<p>I have a date in the format of "14/11/2012 4:26:10 PM" pulled from a mysql query.</p> <p>I'm not very experienced with PHP, but how can i calculate a simple timespan between dates "Then" and "Now"?</p> <p>And format it in a human readable string? for example... "1hour, 5 minutes ago".</p> <p>I've tried to search for a solution and i found one that i thought worked but it didn't account for the AM/PM so it ended up causing a problem when i converted it to a time stamp. does anyone have any idea?</p> <p>This is what i am trying to do but this does not work so well:</p> <pre><code>$time = $row["NotificationSent"]; list($day, $month, $year, $hour, $minute) = split('[/ :]', $time); $timestamp = mktime($hour, $minute,0, $month, $day, $year); $j = TimeSince($timestamp); </code></pre> <p>the timesince function i found off google that I'm using is:</p> <pre><code> function TimeSince($original) // $original should be the original date and time in Unix format { // Common time periods as an array of arrays $periods = array( array(60 * 60 * 24 * 365 , 'year'), array(60 * 60 * 24 * 30 , 'month'), array(60 * 60 * 24 * 7, 'week'), array(60 * 60 * 24 , 'day'), array(60 * 60 , 'hour'), array(60 , 'minute'), ); $today = time(); $since = $today - $original; // Find the difference of time between now and the past // Loop around the periods, starting with the biggest for ($i = 0, $j = count($periods); $i &lt; $j; $i++) { $seconds = $periods[$i][0]; $name = $periods[$i][1]; // Find the biggest whole period if (($count = floor($since / $seconds)) != 0) { break; } } $output = ($count == 1) ? '1 '.$name : "$count {$name}s"; if ($i + 1 &lt; $j) { // Retrieving the second relevant period $seconds2 = $periods[$i + 1][0]; $name2 = $periods[$i + 1][1]; // Only show it if it's greater than 0 if (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0) { $output .= ($count2 == 1) ? ', 1 '.$name2 : ", $count2 {$name2}s"; } } return $output; } </code></pre> <p>The returned result is formatted to what I'm looking for but is giving incorrect numbers. "19/11/2012 2:48:53 PM" is returning "1 day, 5 hours" but it should be "17 hrs, 32 mins"</p> <p>Any help is appreciated. </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload