WordPress.org

Make WordPress Core

Ticket #9272: 9272.patch

File 9272.patch, 2.5 KB (added by Viper007Bond, 5 years ago)

First pass

  • wp-includes/formatting.php

     
    14621462 * 
    14631463 * @param int $from Unix timestamp from which the difference begins. 
    14641464 * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set. 
     1465 * @param int $limit Optional. The number of unit types to display (i.e. the accuracy). Defaults to 1. 
    14651466 * @return string Human readable time difference. 
    14661467 */ 
    1467 function human_time_diff( $from, $to = '' ) { 
     1468function human_time_diff( $from, $to = '', $limit = 1 ) { 
     1469        // Since all months/years aren't the same, these values are what Google's calculator says 
     1470        $units = apply_filters( 'time_units', array( 
     1471                31556926 => array( __('%s year'),  __('%s years') ), 
     1472                2629744  => array( __('%s month'), __('%s months') ), 
     1473                604800   => array( __('%s week'),  __('%s weeks') ), 
     1474                86400    => array( __('%s day'),   __('%s days') ), 
     1475                3600     => array( __('%s hour'),  __('%s hours') ), 
     1476                60       => array( __('%s min'),   __('%s mins') ), 
     1477        ) ); 
     1478 
    14681479        if ( empty($to) ) 
    14691480                $to = time(); 
    1470         $diff = (int) abs($to - $from); 
    1471         if ($diff <= 3600) { 
    1472                 $mins = round($diff / 60); 
    1473                 if ($mins <= 1) { 
    1474                         $mins = 1; 
    1475                 } 
    1476                 $since = sprintf(_n('%s min', '%s mins', $mins), $mins); 
    1477         } else if (($diff <= 86400) && ($diff > 3600)) { 
    1478                 $hours = round($diff / 3600); 
    1479                 if ($hours <= 1) { 
    1480                         $hours = 1; 
    1481                 } 
    1482                 $since = sprintf(_n('%s hour', '%s hours', $hours), $hours); 
    1483         } elseif ($diff >= 86400) { 
    1484                 $days = round($diff / 86400); 
    1485                 if ($days <= 1) { 
    1486                         $days = 1; 
    1487                 } 
    1488                 $since = sprintf(_n('%s day', '%s days', $days), $days); 
     1481 
     1482        $from = (int) $from; 
     1483        $to   = (int) $to; 
     1484        $diff = (int) abs( $to - $from ); 
     1485 
     1486        $items = 0; 
     1487        $output = array(); 
     1488 
     1489        foreach ( $units as $unitsec => $unitnames ) { 
     1490                if ( $items >= $limit ) 
     1491                        break; 
     1492 
     1493                if ( $diff < $unitsec ) 
     1494                        continue; 
     1495 
     1496                $numthisunits = floor( $diff / $unitsec ); 
     1497                $diff = $diff - ( $numthisunits * $unitsec ); 
     1498                $items++; 
     1499 
     1500                if ( $numthisunits > 0 ) 
     1501                        $output[] = sprintf( _n( $unitnames[0], $unitnames[1], $numthisunits ), $numthisunits ); 
    14891502        } 
    1490         return $since; 
     1503 
     1504        // translators: The seperator for human_time_diff() which seperates the years, months, etc. 
     1505        $seperator = _x( ', ', 'human_time_diff' ); 
     1506 
     1507        if ( !empty($output) ) { 
     1508                return implode( $seperator, $output ); 
     1509        } else { 
     1510                $smallest = array_pop( $units ); 
     1511                return sprintf( $smallest[0], 1 ); 
     1512        } 
    14911513} 
    14921514 
    14931515/**