Jan 17, 2015

Find Time Ago using PHP for given date time

If you want to display time like one minute ago, 10 minutes ago .. etc. Below is the method that can be used, need to pass DateTime in YYYY-MM-DD HH:II:SS format.


Method One:
/**
     * returns the time ago in string
     *
     * @param string $date_time           
     * @return string
     */
    function timeAgo($date_time)
    {
        $time_ago = strtotime($date_time);
        $cur_time = time();
        $time_elapsed = $cur_time - $time_ago;
        $seconds = $time_elapsed;
        $minutes = round($time_elapsed / 60);
        $hours = round($time_elapsed / 3600);
        $days = round($time_elapsed / 86400);
        $weeks = round($time_elapsed / 604800);
        $months = round($time_elapsed / 2600640);
        $years = round($time_elapsed / 31207680);
       
        $str = '';
        // Seconds
        if ($seconds <= 60) {
            $str = "few seconds ago";
        }  // Minutes
else
            if ($minutes <= 60) {
                if ($minutes == 1) {
                    $str = "one minute ago";
                } else {
                    $str = "$minutes minutes ago";
                }
            }  // Hours
else
                if ($hours <= 24) {
                    if ($hours == 1) {
                        $str = "an hour ago";
                    } else {
                        $str = "$hours hours ago";
                    }
                }  // Days
else
                    if ($days <= 7) {
                        if ($days == 1) {
                            $str = "yesterday";
                        } else {
                            $str = "$days days ago";
                        }
                    }  // Weeks
else
                        if ($weeks <= 4.3) {
                            if ($weeks == 1) {
                                $str = "a week ago";
                            } else {
                                $str = "$weeks weeks ago";
                            }
                        }  // Months
else
                            if ($months <= 12) {
                                if ($months == 1) {
                                    $str = "a month ago";
                                } else {
                                    $str = "$months months ago";
                                }
                            }  // Years
else {
                                if ($years == 1) {
                                    $str = "one year ago";
                                } else {
                                    $str = "$years years ago";
                                }
                            }
        return $str;
    }
 ex:
echo timeAgo('2015-01-17 14:20:00');
o/p: 31 minutes ago
 
Method Two: in detail
/**
     * gives time ago in detailed
     *
     * @param string $date_time           
     * @return string
     */
    function timeAgo($date_time)
    {
        $then = new DateTime($date_time);
        $now = new DateTime();
        $delta = $now->diff($then);
       
        $quantities = array(
            'year' => $delta->y,
            'month' => $delta->m,
            'day' => $delta->d,
            'hour' => $delta->h,
            'minute' => $delta->i,
            'second' => $delta->s
        );
       
        $str = '';
        foreach ($quantities as $unit => $value) {
            if ($value == 0)
                continue;
            $str .= $value . ' ' . $unit;
            if ($value != 1) {
                $str .= 's';
            }
            $str .= ', ';
        }
        $str = $str == '' ? 'a moment ' : substr($str, 0, - 2);
        return $str . ' ago';
    }
 ex:
echo timeAgo('2015-01-17 14:20:00');
o/p: 31 minutes, 14 seconds ago