복붙노트

예를 들어 PHP에서 1 일 전, 2 일 전에 타임 스탬프를 시간으로 변환하는 중 ...

PHP

예를 들어 PHP에서 1 일 전, 2 일 전에 타임 스탬프를 시간으로 변환하는 중 ...

나는 형식 2009-09-12 20:57:19의 타임 스탬프를 변환하려고하고 PHP로 3 분 전에 비슷한 것으로 바꿔 놓았다.

이 작업을 수행하는 데 유용한 스크립트를 발견했지만 시간 변수로 사용할 다른 형식을 찾고 있다고 생각합니다. 이 형식으로 작업하기 위해 수정하고 싶은 스크립트는 다음과 같습니다.

function _ago($tm,$rcs = 0) {
    $cur_tm = time(); 
    $dif = $cur_tm-$tm;
    $pds = array('second','minute','hour','day','week','month','year','decade');
    $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);

    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
        $no = floor($no);
        if($no <> 1)
            $pds[$v] .='s';
        $x = sprintf("%d %s ",$no,$pds[$v]);
        if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
            $x .= time_ago($_tm);
        return $x;
    }

나는 처음 몇 라인에서 스크립트가 다음과 같이 보이는 것을 시도한다고 생각한다. (다른 날짜 형식 수학) :

$dif = 1252809479 - 2009-09-12 20:57:19;

내 타임 스탬프를 (unix?) 형식으로 변환하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.

    echo time_elapsed_string('2013-05-01 00:22:35');
    echo time_elapsed_string('@1367367755'); # timestamp input
    echo time_elapsed_string('2013-05-01 00:22:35', true);
    

    입력은 지원되는 날짜 및 시간 형식 일 수 있습니다.

    4 months ago
    4 months, 2 weeks, 3 days, 1 hour, 49 minutes, 15 seconds ago
    
    function time_elapsed_string($datetime, $full = false) {
        $now = new DateTime;
        $ago = new DateTime($datetime);
        $diff = $now->diff($ago);
    
        $diff->w = floor($diff->d / 7);
        $diff->d -= $diff->w * 7;
    
        $string = array(
            'y' => 'year',
            'm' => 'month',
            'w' => 'week',
            'd' => 'day',
            'h' => 'hour',
            'i' => 'minute',
            's' => 'second',
        );
        foreach ($string as $k => &$v) {
            if ($diff->$k) {
                $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
            } else {
                unset($string[$k]);
            }
        }
    
        if (!$full) $string = array_slice($string, 0, 1);
        return $string ? implode(', ', $string) . ' ago' : 'just now';
    }
    
  2. ==============================

    2.

    function time_elapsed_string($ptime)
    {
        $etime = time() - $ptime;
    
        if ($etime < 1)
        {
            return '0 seconds';
        }
    
        $a = array( 365 * 24 * 60 * 60  =>  'year',
                     30 * 24 * 60 * 60  =>  'month',
                          24 * 60 * 60  =>  'day',
                               60 * 60  =>  'hour',
                                    60  =>  'minute',
                                     1  =>  'second'
                    );
        $a_plural = array( 'year'   => 'years',
                           'month'  => 'months',
                           'day'    => 'days',
                           'hour'   => 'hours',
                           'minute' => 'minutes',
                           'second' => 'seconds'
                    );
    
        foreach ($a as $secs => $str)
        {
            $d = $etime / $secs;
            if ($d >= 1)
            {
                $r = round($d);
                return $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ago';
            }
        }
    }
    
  3. ==============================

    3.

    $time_elapsed = timeAgo($time_ago); //The argument $time_ago is in timestamp (Y-m-d H:i:s)format.
    
    //Function definition
    
    function timeAgo($time_ago)
    {
        $time_ago = strtotime($time_ago);
        $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 );
        // Seconds
        if($seconds <= 60){
            return "just now";
        }
        //Minutes
        else if($minutes <=60){
            if($minutes==1){
                return "one minute ago";
            }
            else{
                return "$minutes minutes ago";
            }
        }
        //Hours
        else if($hours <=24){
            if($hours==1){
                return "an hour ago";
            }else{
                return "$hours hrs ago";
            }
        }
        //Days
        else if($days <= 7){
            if($days==1){
                return "yesterday";
            }else{
                return "$days days ago";
            }
        }
        //Weeks
        else if($weeks <= 4.3){
            if($weeks==1){
                return "a week ago";
            }else{
                return "$weeks weeks ago";
            }
        }
        //Months
        else if($months <=12){
            if($months==1){
                return "a month ago";
            }else{
                return "$months months ago";
            }
        }
        //Years
        else{
            if($years==1){
                return "one year ago";
            }else{
                return "$years years ago";
            }
        }
    }
    
  4. ==============================

    4.

    이것은 실제로 내가 찾은 더 나은 해결책입니다. 그러나 그것은 완벽하게 작동하지만 jQuery를 사용합니다. 또한 SO 및 Facebook과 마찬가지로 자동으로 새로 고침되므로 업데이트를 확인하기 위해 페이지를 새로 고칠 필요가 없습니다.

    이 플러그인은

    e.g. "4 minutes ago" or "about 1 day ago
    

    http://timeago.yarp.com/

  5. ==============================

    5.

    왜 아무도 탄소에 대해 언급하지 못했습니다.

    https://github.com/briannesbitt/Carbon

    이것은 실제로 php dateTime (이미 여기에 사용 된)의 확장이며 diffForHumans 메소드입니다. 그래서 당신이해야 할 일은 :

    $dt = Carbon::parse('2012-9-5 23:26:11.123789');
    echo $dt->diffForHumans();
    

    더 많은 예 : http://carbon.nesbot.com/docs/#api-humandiff

    이 솔루션의 장점 :

  6. ==============================

    6.

    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':'');
                }
    
            }
    
    echo humanTiming( strtotime($mytimestring) );
    
  7. ==============================

    7.

    나는 다음과 같은 결과를 발견 못생긴 :

    그 때문에 복수형을 존중하고 빈 값을 제거하고 선택적으로 출력을 줄일 수있는 기능을 실현했습니다.

    function since($timestamp, $level=6) {
        global $lang;
        $date = new DateTime();
        $date->setTimestamp($timestamp);
        $date = $date->diff(new DateTime());
        // build array
        $since = json_decode($date->format('{"year":%y,"month":%m,"day":%d,"hour":%h,"minute":%i,"second":%s}'), true);
        // remove empty date values
        $since = array_filter($since);
        // output only the first x date values
        $since = array_slice($since, 0, $level);
        // build string
        $last_key = key(array_slice($since, -1, 1, true));
        $string = '';
        foreach ($since as $key => $val) {
            // separator
            if ($string) {
                $string .= $key != $last_key ? ', ' : ' ' . $lang['and'] . ' ';
            }
            // set plural
            $key .= $val > 1 ? 's' : '';
            // add date value
            $string .= $val . ' ' . $lang[ $key ];
        }
        return $string;
    }
    

    훨씬 나아 보인다.

    선택적으로 $ level = 2를 사용하여 다음과 같이 단축하십시오.

    영어로만 필요하거나 필요에 맞게이 번역을 편집하려면 $ lang 부분을 제거하십시오.

    $lang = array(
        'second' => 'Sekunde',
        'seconds' => 'Sekunden',
        'minute' => 'Minute',
        'minutes' => 'Minuten',
        'hour' => 'Stunde',
        'hours' => 'Stunden',
        'day' => 'Tag',
        'days' => 'Tage',
        'month' => 'Monat',
        'months' => 'Monate',
        'year' => 'Jahr',
        'years' => 'Jahre',
        'and' => 'und',
    );
    
  8. ==============================

    8.

    원래 함수를 약간 수정했습니다 (제 의견으로는 더 유용하거나 논리적이었습니다).

    // display "X time" ago, $rcs is precision depth
    function time_ago ($tm, $rcs = 0) {
      $cur_tm = time(); 
      $dif = $cur_tm - $tm;
      $pds = array('second','minute','hour','day','week','month','year','decade');
      $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
    
      for ($v = count($lngh) - 1; ($v >= 0) && (($no = $dif / $lngh[$v]) <= 1); $v--);
        if ($v < 0)
          $v = 0;
      $_tm = $cur_tm - ($dif % $lngh[$v]);
    
      $no = ($rcs ? floor($no) : round($no)); // if last denomination, round
    
      if ($no != 1)
        $pds[$v] .= 's';
      $x = $no . ' ' . $pds[$v];
    
      if (($rcs > 0) && ($v >= 1))
        $x .= ' ' . $this->time_ago($_tm, $rcs - 1);
    
      return $x;
    }
    
  9. ==============================

    9.

    다른 옵션을 던지면 ...

    내가 여기에 게시하는 DateTime 메소드를 선호하는 반면, 나는 0 년 등으로 표시된 사실을 싫어했다.

    /* 
     * Returns a string stating how long ago this happened
     */
    
    private function timeElapsedString($ptime){
        $diff = time() - $ptime;
        $calc_times = array();
        $timeleft   = array();
    
        // Prepare array, depending on the output we want to get.
        $calc_times[] = array('Year',   'Years',   31557600);
        $calc_times[] = array('Month',  'Months',  2592000);
        $calc_times[] = array('Day',    'Days',    86400);
        $calc_times[] = array('Hour',   'Hours',   3600);
        $calc_times[] = array('Minute', 'Minutes', 60);
        $calc_times[] = array('Second', 'Seconds', 1);
    
        foreach ($calc_times AS $timedata){
            list($time_sing, $time_plur, $offset) = $timedata;
    
            if ($diff >= $offset){
                $left = floor($diff / $offset);
                $diff -= ($left * $offset);
                $timeleft[] = "{$left} " . ($left == 1 ? $time_sing : $time_plur);
            }
        }
    
        return $timeleft ? (time() > $ptime ? null : '-') . implode(' ', $timeleft) : 0;
    }
    
  10. ==============================

    10.

    나는 이것을 만들었고 1470919932와 같은 유닉스 타임 스탬프 나 16-08-11 14:53:30과 같은 형식화 된 시간 둘 다에서 잘 작동하고있다.

    function timeAgo($time_ago) {
        $time_ago =  strtotime($time_ago) ? strtotime($time_ago) : $time_ago;
        $time  = time() - $time_ago;
    
    switch($time):
    // seconds
    case $time <= 60;
    return 'lessthan a minute ago';
    // minutes
    case $time >= 60 && $time < 3600;
    return (round($time/60) == 1) ? 'a minute' : round($time/60).' minutes ago';
    // hours
    case $time >= 3600 && $time < 86400;
    return (round($time/3600) == 1) ? 'a hour ago' : round($time/3600).' hours ago';
    // days
    case $time >= 86400 && $time < 604800;
    return (round($time/86400) == 1) ? 'a day ago' : round($time/86400).' days ago';
    // weeks
    case $time >= 604800 && $time < 2600640;
    return (round($time/604800) == 1) ? 'a week ago' : round($time/604800).' weeks ago';
    // months
    case $time >= 2600640 && $time < 31207680;
    return (round($time/2600640) == 1) ? 'a month ago' : round($time/2600640).' months ago';
    // years
    case $time >= 31207680;
    return (round($time/31207680) == 1) ? 'a year ago' : round($time/31207680).' years ago' ;
    
    endswitch;
    }
    
    ?>
    
  11. ==============================

    11.

    그것을 확인하는 데 도움이됩니다.

       function calculate_time_span($seconds)
    {  
     $year = floor($seconds /31556926);
    $months = floor($seconds /2629743);
    $week=floor($seconds /604800);
    $day = floor($seconds /86400); 
    $hours = floor($seconds / 3600);
     $mins = floor(($seconds - ($hours*3600)) / 60); 
    $secs = floor($seconds % 60);
     if($seconds < 60) $time = $secs." seconds ago";
     else if($seconds < 3600 ) $time =($mins==1)?$mins."now":$mins." mins ago";
     else if($seconds < 86400) $time = ($hours==1)?$hours." hour ago":$hours." hours ago";
     else if($seconds < 604800) $time = ($day==1)?$day." day ago":$day." days ago";
     else if($seconds < 2629743) $time = ($week==1)?$week." week ago":$week." weeks ago";
     else if($seconds < 31556926) $time =($months==1)? $months." month ago":$months." months ago";
     else $time = ($year==1)? $year." year ago":$year." years ago";
    return $time; 
    }  
      $seconds = time() - strtotime($post->post_date); 
    echo calculate_time_span($seconds); 
    
  12. ==============================

    12.

    나는 여기에 몇 가지 해답이 있다는 것을 알고 있지만 이것이 내가 생각해 낸 것이다. 이 함수는 MySQL DATETIME 값만 응답합니다. 배열 $ a는 약간의 작업이 필요합니다. 개선 방법에 대한 의견을 환영합니다. 다른 이름으로 전화 :

    에코 time_elapsed_string ( '2014-11-14 09:42:28');

    function time_elapsed_string($ptime)
    {
        // Past time as MySQL DATETIME value
        $ptime = strtotime($ptime);
    
        // Current time as MySQL DATETIME value
        $csqltime = date('Y-m-d H:i:s');
    
        // Current time as Unix timestamp
        $ctime = strtotime($csqltime); 
    
        // Elapsed time
        $etime = $ctime - $ptime;
    
        // If no elapsed time, return 0
        if ($etime < 1){
            return '0 seconds';
        }
    
        $a = array( 365 * 24 * 60 * 60  =>  'year',
                     30 * 24 * 60 * 60  =>  'month',
                          24 * 60 * 60  =>  'day',
                               60 * 60  =>  'hour',
                                    60  =>  'minute',
                                     1  =>  'second'
        );
    
        $a_plural = array( 'year'   => 'years',
                           'month'  => 'months',
                           'day'    => 'days',
                           'hour'   => 'hours',
                           'minute' => 'minutes',
                           'second' => 'seconds'
        );
    
        foreach ($a as $secs => $str){
            // Divide elapsed time by seconds
            $d = $etime / $secs;
            if ($d >= 1){
                // Round to the next lowest integer 
                $r = floor($d);
                // Calculate time to remove from elapsed time
                $rtime = $r * $secs;
                // Recalculate and store elapsed time for next loop
                if(($etime - $rtime)  < 0){
                    $etime -= ($r - 1) * $secs;
                }
                else{
                    $etime -= $rtime;
                }
                // Create string to return
                $estring = $estring . $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ';
            }
        }
        return $estring . ' ago';
    }
    
  13. ==============================

    13.

    나는 이것을 시도하고 나를 위해 잘 작동합니다.

    $datetime1 = new DateTime('2009-10-11');
    $datetime2 = new DateTime('2009-10-10');
    $difference = $datetime1->diff($datetime2);
    echo formatOutput($difference);
    
    function formatOutput($diff){
        /* function to return the highrst defference fount */
        if(!is_object($diff)){
            return;
        }
    
        if($diff->y > 0){
            return $diff->y .(" year".($diff->y > 1?"s":"")." ago");
        }
    
        if($diff->m > 0){
            return $diff->m .(" month".($diff->m > 1?"s":"")." ago");
        }
    
        if($diff->d > 0){
            return $diff->d .(" day".($diff->d > 1?"s":"")." ago");
        }
    
        if($diff->h > 0){
            return $diff->h .(" hour".($diff->h > 1?"s":"")." ago");
        }
    
        if($diff->i > 0){
            return $diff->i .(" minute".($diff->i > 1?"s":"")." ago");
        }
    
        if($diff->s > 0){
            return $diff->s .(" second".($diff->s > 1?"s":"")." ago");
        }
    }
    

    참조 용으로이 링크를 확인하십시오.

    감사! 재미있게 놀아 라.

  14. ==============================

    14.

    여기에있는 많은 솔루션은 반올림을 설명하지 않았습니다. 예 :

    이벤트는 이틀 전 오후 3시에 발생했습니다. 오후 2시에 확인하면 하루 전에 표시됩니다. 오후 4시에 확인 중이면 2 일 전에 표시됩니다.

    유닉스 시간으로 작업한다면, 다음과 같이 도움이된다.

    // how long since event has passed in seconds
    $secs = time() - $time_ago;
    
    // how many seconds in a day
    $sec_per_day = 60*60*24;
    
    // days elapsed
    $days_elapsed = floor($secs / $sec_per_day);
    
    // how many seconds passed today
    $today_seconds = date('G')*3600 + date('i') * 60 + date('s');
    
    // how many seconds passed in the final day calculation
    $remain_seconds = $secs % $sec_per_day;
    
    if($today_seconds < $remain_seconds)
    {
        $days_elapsed++;
    }
    
    echo 'The event was '.$days_ago.' days ago.';
    

    윤초와 일광 절약 시간이 걱정된다면 완벽하지 않습니다.

  15. ==============================

    15.

    타임 스탬프의 각 부분을 가져 와서 유닉스 시간으로 변환해야합니다. 타임 스탬프 예를 들어, 2009-09-12 20:57:19.

    (((2008-1970) * 365) + (8 * 30) +12) * 24 + 20은 1970 년 1 월 1 일 이후의 시간에 대한 대략적인 추정치를 제공합니다.

    그 숫자를 취하여 60을 곱하고 57을 더하여 분을 얻으십시오.

    가져 가라. 60을 곱하고 19를 더한다.

    그러나 그것은 매우 거칠고 부정확하게 변환 될 것입니다.

    정상적인 유닉스 시간으로 시작할 수없는 이유가 있습니까?

  16. ==============================

    16.

    MySQL을 사용하는 경우 UNIX_TIMESTAMP () 함수를 사용하십시오.

  17. ==============================

    17.

    이 기능은 영어로 사용되지 않습니다. 나는 영어로 단어를 번역했다. 영어를 사용하기 전에 더 많은 수정이 필요합니다.

    function ago($d) {
    $ts = time() - strtotime(str_replace("-","/",$d));
    
            if($ts>315360000) $val = round($ts/31536000,0).' year';
            else if($ts>94608000) $val = round($ts/31536000,0).' years';
            else if($ts>63072000) $val = ' two years';
            else if($ts>31536000) $val = ' a year';
    
            else if($ts>24192000) $val = round($ts/2419200,0).' month';
            else if($ts>7257600) $val = round($ts/2419200,0).' months';
            else if($ts>4838400) $val = ' two months';
            else if($ts>2419200) $val = ' a month';
    
    
            else if($ts>6048000) $val = round($ts/604800,0).' week';
            else if($ts>1814400) $val = round($ts/604800,0).' weeks';
            else if($ts>1209600) $val = ' two weeks';
            else if($ts>604800) $val = ' a week';
    
            else if($ts>864000) $val = round($ts/86400,0).' day';
            else if($ts>259200) $val = round($ts/86400,0).' days';
            else if($ts>172800) $val = ' two days';
            else if($ts>86400) $val = ' a day';
    
            else if($ts>36000) $val = round($ts/3600,0).' year';
            else if($ts>10800) $val = round($ts/3600,0).' years';
            else if($ts>7200) $val = ' two years';
            else if($ts>3600) $val = ' a year';
    
            else if($ts>600) $val = round($ts/60,0).' minute';
            else if($ts>180) $val = round($ts/60,0).' minutes';
            else if($ts>120) $val = ' two minutes';
            else if($ts>60) $val = ' a minute';
    
            else if($ts>10) $val = round($ts,0).' second';
            else if($ts>2) $val = round($ts,0).' seconds';
            else if($ts>1) $val = ' two seconds';
            else $val = $ts.' a second';
    
    
            return $val;
        }
    
  18. ==============================

    18.

    위의 약간 수정 된 답변 :

      $commentTime = strtotime($whatever)
      $today       = strtotime('today');
      $yesterday   = strtotime('yesterday');
      $todaysHours = strtotime('now') - strtotime('today');
    
    private function timeElapsedString(
        $commentTime,
        $todaysHours,
        $today,
        $yesterday
    ) {
        $tokens = array(
            31536000 => 'year',
            2592000 => 'month',
            604800 => 'week',
            86400 => 'day',
            3600 => 'hour',
            60 => 'minute',
            1 => 'second'
        );
        $time = time() - $commentTime;
        $time = ($time < 1) ? 1 : $time;
        if ($commentTime >= $today || $commentTime < $yesterday) {
            foreach ($tokens as $unit => $text) {
                if ($time < $unit) {
                    continue;
                }
                if ($text == 'day') {
                    $numberOfUnits = floor(($time - $todaysHours) / $unit) + 1;
                } else {
                    $numberOfUnits = floor(($time)/ $unit);
                }
                return $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '') . ' ago';
            }
        } else {
            return 'Yesterday';
        }
    }
    
  19. ==============================

    19.

    이것이 내가 함께 간 것입니다. 그것은 압바스 칸 (Abbas khan) 지위의 수정판입니다 :

    <?php
    
      function calculate_time_span($post_time)
      {  
      $seconds = time() - strtotime($post);
      $year = floor($seconds /31556926);
      $months = floor($seconds /2629743);
      $week=floor($seconds /604800);
      $day = floor($seconds /86400); 
      $hours = floor($seconds / 3600);
      $mins = floor(($seconds - ($hours*3600)) / 60); 
      $secs = floor($seconds % 60);
      if($seconds < 60) $time = $secs." seconds ago";
      else if($seconds < 3600 ) $time =($mins==1)?$mins."now":$mins." mins ago";
      else if($seconds < 86400) $time = ($hours==1)?$hours." hour ago":$hours." hours ago";
      else if($seconds < 604800) $time = ($day==1)?$day." day ago":$day." days ago";
      else if($seconds < 2629743) $time = ($week==1)?$week." week ago":$week." weeks ago";
      else if($seconds < 31556926) $time =($months==1)? $months." month ago":$months." months ago";
      else $time = ($year==1)? $year." year ago":$year." years ago";
      return $time; 
      }  
    
    
    
     // uses
     // $post_time="2017-12-05 02:05:12";
     // echo calculate_time_span($post_time); 
    
  20. ==============================

    20.

    우리가 응용 프로그램에서 '1 시간 전'또는 2 주 전 등과 같이 시간을 표시해야하는 메시지 또는 알림 시스템을 개발할 때 메시지의 현재 시간과 이후 시간을 계산하는 것입니다.

    나는이 사이트에 xx time 함수가 작동하지 않는 이전에 질문에 대한 대답을 여기에있다.

    이게 너에게 도움이되기를 바란다.

  21. ==============================

    21.

    $time_ago = ' ';
    $time = time() - $time; // to get the time since that moment
    $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);
    $time_ago = ' '.$time_ago. $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'').'  ';
    $time = $time % $unit;}echo $time_ago;
    
  22. ==============================

    22.

    여기 내 해결책은 확인하고 요구 사항에 따라 수정하십시오

    function getHowLongAgo($date, $display = array('Year', 'Month', 'Day', 'Hour', 'Minute', 'Second'), $ago = '') {
            date_default_timezone_set('Australia/Sydney');
            $timestamp = strtotime($date);
            $timestamp = (int) $timestamp;
            $current_time = time();
            $diff = $current_time - $timestamp;
    
            //intervals in seconds
            $intervals = array(
                'year' => 31556926, 'month' => 2629744, 'week' => 604800, 'day' => 86400, 'hour' => 3600, 'minute' => 60
            );
    
            //now we just find the difference
            if ($diff == 0) {
                return ' Just now ';
            }
    
            if ($diff < 60) {
                return $diff == 1 ? $diff . ' second ago ' : $diff . ' seconds ago ';
            }
    
            if ($diff >= 60 && $diff < $intervals['hour']) {
                $diff = floor($diff / $intervals['minute']);
                return $diff == 1 ? $diff . ' minute ago ' : $diff . ' minutes ago ';
            }
    
            if ($diff >= $intervals['hour'] && $diff < $intervals['day']) {
                $diff = floor($diff / $intervals['hour']);
                return $diff == 1 ? $diff . ' hour ago ' : $diff . ' hours ago ';
            }
    
            if ($diff >= $intervals['day'] && $diff < $intervals['week']) {
                $diff = floor($diff / $intervals['day']);
                return $diff == 1 ? $diff . ' day ago ' : $diff . ' days ago ';
            }
    
            if ($diff >= $intervals['week'] && $diff < $intervals['month']) {
                $diff = floor($diff / $intervals['week']);
                return $diff == 1 ? $diff . ' week ago ' : $diff . ' weeks ago ';
            }
    
            if ($diff >= $intervals['month'] && $diff < $intervals['year']) {
                $diff = floor($diff / $intervals['month']);
                return $diff == 1 ? $diff . ' month ago ' : $diff . ' months ago ';
            }
    
            if ($diff >= $intervals['year']) {
                $diff = floor($diff / $intervals['year']);
                return $diff == 1 ? $diff . ' year ago ' : $diff . ' years ago ';
            }
        }
    

    감사

  23. ==============================

    23.

    # This function prints the difference between two php datetime objects
    # in a more human readable form
    # inputs should be like strtotime($date)
    function humanizeDateDiffference($now,$otherDate=null,$offset=null){
        if($otherDate != null){
            $offset = $now - $otherDate;
        }
        if($offset != null){
            $deltaS = $offset%60;
            $offset /= 60;
            $deltaM = $offset%60;
            $offset /= 60;
            $deltaH = $offset%24;
            $offset /= 24;
            $deltaD = ($offset > 1)?ceil($offset):$offset;      
        } else{
            throw new Exception("Must supply otherdate or offset (from now)");
        }
        if($deltaD > 1){
            if($deltaD > 365){
                $years = ceil($deltaD/365);
                if($years ==1){
                    return "last year"; 
                } else{
                    return "<br>$years years ago";
                }   
            }
            if($deltaD > 6){
                return date('d-M',strtotime("$deltaD days ago"));
            }       
            return "$deltaD days ago";
        }
        if($deltaD == 1){
            return "Yesterday";
        }
        if($deltaH == 1){
            return "last hour";
        }
        if($deltaM == 1){
            return "last minute";
        }
        if($deltaH > 0){
            return $deltaH." hours ago";
        }
        if($deltaM > 0){
            return $deltaM." minutes ago";
        }
        else{
            return "few seconds ago";
        }
    }
    
  24. ==============================

    24.

    사용:

    echo elapsed_time('2016-05-09 17:00:00'); // 18 saat 8 dakika önce yazıldı.
    

    기능:

    function elapsed_time($time){// Nekadar zaman geçmiş
    
            $diff = time() - strtotime($time); 
    
            $sec = $diff;
            $min = floor($diff/60);
            $hour = floor($diff/(60*60));
            $hour_min = floor($min - ($hour*60));
            $day = floor($diff/(60*60*24));
            $day_hour = floor($hour - ($day*24));
            $week = floor($diff/(60*60*24*7));
            $mon = floor($diff/(60*60*24*7*4));
            $year = floor($diff/(60*60*24*7*4*12));
    
            //difference calculate to string
            if($sec < (60*5)){
                return 'şimdi yazıldı.';
            }elseif($min < 60){
                return 'biraz önce yazıldı.';
            }elseif($hour < 24){
                return $hour.' saat '.$hour_min.' dakika önce yazıldı.';
            }elseif($day < 7){
                if($day_hour!=0){$day_hour=$day_hour.' saat ';}else{$day_hour='';}
                return $day.' gün '.$day_hour.'önce yazıldı.';
            }elseif($week < 4){
                return $week.' hafta önce yazıldı.';
            }elseif($mon < 12){
                return $mon.' ay önce yazıldı.';
            }else{
                return $year.' yıl önce yazıldı.';
            }
        }
    
  25. ==============================

    25.

    당신이 사용할 수있는:

    date("Y-m-d H:i:s",strtotime("1 day ago"));
    
  26. ==============================

    26.

    다음은 매우 간단하고 매우 효율적인 솔루션입니다.

    function timeElapsed($originalTime){
    
            $timeElapsed=time()-$originalTime;
    
            /*
              You can change the values of the following 2 variables 
              based on your opinion. For 100% accuracy, you can call
              php's cal_days_in_month() and do some additional coding
              using the values you get for each month. After all the
              coding, your final answer will be approximately equal to
              mine. That is why it is okay to simply use the average
              values below.
            */
            $averageNumbDaysPerMonth=(365.242/12);
            $averageNumbWeeksPerMonth=($averageNumbDaysPerMonth/7);
    
            $time1=(((($timeElapsed/60)/60)/24)/365.242);
            $time2=floor($time1);//Years
            $time3=($time1-$time2)*(365.242);
            $time4=($time3/$averageNumbDaysPerMonth);
            $time5=floor($time4);//Months
            $time6=($time4-$time5)*$averageNumbWeeksPerMonth;
            $time7=floor($time6);//Weeks
            $time8=($time6-$time7)*7;
            $time9=floor($time8);//Days
            $time10=($time8-$time9)*24;
            $time11=floor($time10);//Hours
            $time12=($time10-$time11)*60;
            $time13=floor($time12);//Minutes
            $time14=($time12-$time13)*60;
            $time15=round($time14);//Seconds
    
            $timeElapsed=$time2 . 'yrs ' . $time5 . 'months ' . $time7 . 
                         'weeks ' . $time9 .  'days ' . $time11 . 'hrs '
                         . $time13 . 'mins and ' . $time15 . 'secs.';
    
            return $timeElapsed;
    
    }
    

    에코 timeElapsed (1201570814);

    샘플 출력 :

    6yrs 4months 3 주 4 일 12 시간 40 분 36 초.

  27. ==============================

    27.

    내가 작성한 알림 모듈에 대한 나의 해결책은 다음과 같다. Facebook의 알림 드롭 다운과 비슷한 출력을 반환합니다 (예 : 1 일 전, 바로 지금 등).

    public function getTimeDifference($time) {
        //Let's set the current time
        $currentTime = date('Y-m-d H:i:s');
        $toTime = strtotime($currentTime);
    
        //And the time the notification was set
        $fromTime = strtotime($time);
    
        //Now calc the difference between the two
        $timeDiff = floor(abs($toTime - $fromTime) / 60);
    
        //Now we need find out whether or not the time difference needs to be in
        //minutes, hours, or days
        if ($timeDiff < 2) {
            $timeDiff = "Just now";
        } elseif ($timeDiff > 2 && $timeDiff < 60) {
            $timeDiff = floor(abs($timeDiff)) . " minutes ago";
        } elseif ($timeDiff > 60 && $timeDiff < 120) {
            $timeDiff = floor(abs($timeDiff / 60)) . " hour ago";
        } elseif ($timeDiff < 1440) {
            $timeDiff = floor(abs($timeDiff / 60)) . " hours ago";
        } elseif ($timeDiff > 1440 && $timeDiff < 2880) {
            $timeDiff = floor(abs($timeDiff / 1440)) . " day ago";
        } elseif ($timeDiff > 2880) {
            $timeDiff = floor(abs($timeDiff / 1440)) . " days ago";
        }
    
        return $timeDiff;
    }
    
  28. ==============================

    28.

    그냥이 func에 날짜 시간을 전달하십시오. 그것은 당신을 위해 시간 형식으로 인쇄 할 것입니다.

    date_default_timezone_set('your-time-zone');
    function convert($datetime){
      $time=strtotime($datetime);
      $diff=time()-$time;
      $diff/=60;
      $var1=floor($diff);
      $var=$var1<=1 ? 'min' : 'mins';
      if($diff>=60){
        $diff/=60;
        $var1=floor($diff);
        $var=$var1<=1 ? 'hr' : 'hrs';
        if($diff>=24){$diff/=24;$var1=floor($diff);$var=$var1<=1 ? 'day' : 'days';
        if($diff>=30.4375){$diff/=30.4375;$var1=floor($diff);$var=$var1<=1 ? 'month' : 'months';
        if($diff>=12){$diff/=12;$var1=floor($diff);$var=$var1<=1 ? 'year' : 'years';}}}}
        echo $var1,' ',$var,' ago';
      }
    
  29. ==============================

    29.

    원래 작성되었으며이 링크에서 사용 가능합니다.

    function _ago($tm,$rcs = 0) {
       $cur_tm = time(); $dif = $cur_tm-$tm;
       $pds = array('second','minute','hour','day','week','month','year','decade');
       $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
       for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
    
       $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
       if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
       return $x;
    }
    

    시간 () 값이 필요하며 몇 초 / 분 / 시간 / 일 / 년 / 십 년 전에 몇 초가되는지 알려줍니다.

  30. ==============================

    30.

    나는 몇 년 동안 다음과 같은 기능을 사용하고 있습니다. 그리고 그것은 잘 작동합니다 :

    function timeDifference($timestamp)
    {
        $otherDate=$timestamp;
        $now=@date("Y-m-d H:i:s");
    
        $secondDifference=@strtotime($now)-@strtotime($otherDate);
        $extra="";
        if ($secondDifference == 2592000) { 
        // months 
        $difference = $secondDifference/2592000; 
        $difference = round($difference,0); 
        if ($difference>1) { $extra="s"; } 
        $difference = $difference." month".$extra." ago"; 
    }else if($secondDifference > 2592000)
        {$difference=timestamp($timestamp);} 
    elseif ($secondDifference >= 604800) { 
        // weeks 
        $difference = $secondDifference/604800; 
        $difference = round($difference,0); 
        if ($difference>1) { $extra="s"; } 
        $difference = $difference." week".$extra." ago"; 
    } 
    elseif ($secondDifference >= 86400) { 
        // days 
        $difference = $secondDifference/86400; 
        $difference = round($difference,0); 
        if ($difference>1) { $extra="s"; } 
        $difference = $difference." day".$extra." ago"; 
    } 
    elseif ($secondDifference >= 3600) { 
        // hours 
    
        $difference = $secondDifference/3600; 
        $difference = round($difference,0); 
        if ($difference>1) { $extra="s"; } 
        $difference = $difference." hour".$extra." ago"; 
    } 
    elseif ($secondDifference < 3600) { 
        // hours 
        // for seconds (less than minute)
        if($secondDifference<=60)
        {       
            if($secondDifference==0)
            {
                $secondDifference=1;
            }
            if ($secondDifference>1) { $extra="s"; }
            $difference = $secondDifference." second".$extra." ago"; 
    
        }
        else
        {
    
    $difference = $secondDifference/60; 
            if ($difference>1) { $extra="s"; }else{$extra="";}
            $difference = round($difference,0); 
            $difference = $difference." minute".$extra." ago"; 
        }
    } 
    
    $FinalDifference = $difference; 
    return $FinalDifference;
    }
    
  31. from https://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-e-g-1-day-ago-2-days-ago by cc-by-sa and MIT lisence