date / time convert to time since php

后端 未结 5 559
你的背包
你的背包 2021-01-14 10:14

Hello in my database date / time are in this format

2010-06-01T18:20:25+0000

I\'d like to echo that out to time passed since that date / t

相关标签:
5条回答
  • 2021-01-14 10:32

    I changed one line of the above code for the case in which it was posted less than one minute ago.

        function ax_getRoughTimeElapsedAsText($iTime0, $iTime1 = 0)
        {
        if ($iTime1 == 0) { $iTime1 = time(); }
        $iTimeElapsed = $iTime1 - $iTime0;
    
        if ($iTimeElapsed < (60)) {
            return "Less than a minute ago";
        } else if ($iTimeElapsed < (60*60)) {
            $iNum = intval($iTimeElapsed / 60); $sUnit = "minute";
        } else if ($iTimeElapsed < (24*60*60)) {
            $iNum = intval($iTimeElapsed / (60*60)); $sUnit = "hour";
        } else if ($iTimeElapsed < (30*24*60*60)) {
            $iNum = intval($iTimeElapsed / (24*60*60)); $sUnit = "day";
        } else if ($iTimeElapsed < (365*24*60*60)) {
            $iNum = intval($iTimeElapsed / (30*24*60*60)); $sUnit = "month";
        } else {
            $iNum = intval($iTimeElapsed / (365*24*60*60)); $sUnit = "year";
        }
    
        return $iNum . " " . $sUnit . (($iNum != 1) ? "s" : "") . " ago";
        }
    
    0 讨论(0)
  • 2021-01-14 10:32

    u can fetch that fron db and use strtotime function which will make into epoch . and then use date command to print it into any format u want to .

    0 讨论(0)
  • 2021-01-14 10:44

    you can use the func timediff right in your database:

    http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff

    pass the first param as the date, and the second param as now()

    0 讨论(0)
  • 2021-01-14 10:49
    function time_ago($timestamp, $granularity = 2) {
      $timestamp = time() - $timestamp;
      $units = array('1 year|%d years' => 31536000, 
                     '1 week|%d weeks' => 604800, 
                     '1 day|%d days' => 86400, 
                     '1 hour|%d hours' => 3600, 
                     '1 min|%d mins' => 60, 
                     '1 sec|%d secs' => 1
                    );
      $output = '';
      foreach ($units as $key => $value) {
        $key = explode('|', $key);
        if ($timestamp >= $value) {
          $pluralized = floor($timestamp / $value) > 1 ? 
                        sprintf($key[1], floor($timestamp / $value)) : 
                        $key[0];
          $output .= ($output ? ' ' : '') . $pluralized;
          $timestamp %= $value;
          $granularity--;
        }
        if ($granularity == 0) {
          break;
        }
      }
      return $output ? $output : "Just now";
    }
    

    This should be close.

    Edit: added this line: $timestamp = time() - $timestamp;

    0 讨论(0)
  • 2021-01-14 10:53

    Below is a function I wrote to do this. Feel free to use it.

    /**
     * Returns rough (in largest single unit) time elapsed between two times.
     * @param int $iTime0  Initial time, as time_t.
     * @param int $iTime1  Final time, as time_t. 0=use current time.
     * @return string Time elapsed, like "5 minutes" or "3 days" or "1 month".
     *              You might print "ago" after this return if $iTime1 is now.
     * @author Dan Kamins - dos at axonchisel dot net
     */
    function ax_getRoughTimeElapsedAsText($iTime0, $iTime1 = 0)
    {
        if ($iTime1 == 0) { $iTime1 = time(); }
        $iTimeElapsed = $iTime1 - $iTime0;
    
        if ($iTimeElapsed < (60)) {
            $iNum = intval($iTimeElapsed); $sUnit = "second";
        } else if ($iTimeElapsed < (60*60)) {
            $iNum = intval($iTimeElapsed / 60); $sUnit = "minute";
        } else if ($iTimeElapsed < (24*60*60)) {
            $iNum = intval($iTimeElapsed / (60*60)); $sUnit = "hour";
        } else if ($iTimeElapsed < (30*24*60*60)) {
            $iNum = intval($iTimeElapsed / (24*60*60)); $sUnit = "day";
        } else if ($iTimeElapsed < (365*24*60*60)) {
            $iNum = intval($iTimeElapsed / (30*24*60*60)); $sUnit = "month";
        } else {
            $iNum = intval($iTimeElapsed / (365*24*60*60)); $sUnit = "year";
        }
    
        return $iNum . " " . $sUnit . (($iNum != 1) ? "s" : "");
    }
    

    To use this func, you'd need to first convert your times to time_t format (integer #seconds since the "epoch"). Either of these PHP functions will probably help with that: http://php.net/strptime or http://php.net/strtotime.

    0 讨论(0)
提交回复
热议问题