Days Ago

From CodeCodex

[edit] PHP


// convert a date into a string that tells how long ago that date was.... eg: 2 days ago, 3 minutes ago.
function ago($d) {
        $c = getdate();
        $p = array('year', 'mon', 'mday', 'hours', 'minutes', 'seconds');
        $display = array('year', 'month', 'day', 'hour', 'minute', 'second');
        $factor = array(0, 12, 30, 24, 60, 60);
        $d = datetoarr($d);
        for ($w = 0; $w < 6; $w++) {
                if ($w > 0) {
                        $c[$p[$w]] += $c[$p[$w-1]] * $factor[$w];
                        $d[$p[$w]] += $d[$p[$w-1]] * $factor[$w];
                }
                if ($c[$p[$w]] - $d[$p[$w]] > 1) {
                        return ($c[$p[$w]] - $d[$p[$w]]).' '.$display[$w].'s ago';
                }
        }
        return '';
}

// you can replace this if need be. This converts my dates returned from a mysql date string into
//   an array object similar to that returned by getdate().
function datetoarr($d) {
        preg_match("/([0-9]{4})(\\-)([0-9]{2})(\\-)([0-9]{2}) ([0-9]{2})(\\:)([0-9]{2})(\\:)([0-9]{2})/", $d, $matches);
        return array(
        'seconds' => $matches[10],
        'minutes' => $matches[8],
        'hours' => $matches[6],
        'mday' => $matches[5],
        'mon' => $matches[3],
        'year' => $matches[1],
        );
}