phpdatetimetimestamprelative-time-span

PHP How to find the time elapsed since a date time?


How to find the time elapsed since a date time stamp like 2010-04-28 17:25:43, final out put text should be like xx Minutes Ago/xx Days Ago


Solution

  • Most of the answers seem focused around converting the date from a string to time. It seems you're mostly thinking about getting the date into the '5 days ago' format, etc.. right?

    This is how I'd go about doing that:

    $time = strtotime('2010-04-28 17:25:43');
    
    echo 'event happened '.humanTiming($time).' ago';
    
    function humanTiming ($time)
    {
    
        $time = time() - $time; // to get the time since that moment
        $time = ($time<1)? 1 : $time;
        $tokens = array (
            31536000 => 'year',
            2592000 => 'month',
            604800 => 'week',
            86400 => 'day',
            3600 => 'hour',
            60 => 'minute',
            1 => 'second'
        );
    
        foreach ($tokens as $unit => $text) {
            if ($time < $unit) continue;
            $numberOfUnits = floor($time / $unit);
            return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
        }
    
    }
    

    I haven't tested that, but it should work.

    The result would look like

    event happened 4 days ago
    

    or

    event happened 1 minute ago