WordPress.org

Make WordPress Core

Ticket #9272: 9272.2.patch

File 9272.2.patch, 3.3 KB (added by Viper007Bond, 3 years ago)

Patch refresh plus reverse order if RTL and add seconds boolean parameter

  • wp-includes/formatting.php

     
    18391839 * Determines the difference between two timestamps. 
    18401840 * 
    18411841 * The difference is returned in a human readable format such as "1 hour", 
    1842  * "5 mins", "2 days". 
     1842 * "5 mins", "2 days", or "5 days, 2 hours" (limit=2). 
    18431843 * 
    18441844 * @since 1.5.0 
    18451845 * 
    18461846 * @param int $from Unix timestamp from which the difference begins. 
    18471847 * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set. 
     1848 * @param int $limit Optional. The number of unit types to display (i.e. the accuracy). Defaults to 1. 
     1849 * @param boolean $seconds Output seconds too if $limit isn't reached. 
    18481850 * @return string Human readable time difference. 
    18491851 */ 
    1850 function human_time_diff( $from, $to = '' ) { 
    1851         if ( empty($to) ) 
     1852function human_time_diff( $from, $to = null, $limit = 1, $seconds = false ) { 
     1853        // Since all months/years aren't the same, these values are what Google's calculator says 
     1854        // This needs to be sorted from largest unit to smallest unit 
     1855        $units = array( 
     1856                31556926 => array( __( '%d year' ),  __( '%d years' ) ), 
     1857                2629744  => array( __( '%d month' ), __( '%d months' ) ), 
     1858                604800   => array( __( '%d week' ),  __( '%d weeks' ) ), 
     1859                86400    => array( __( '%d day' ),   __( '%d days' ) ), 
     1860                3600     => array( __( '%d hour' ),  __( '%d hours' ) ), 
     1861                60       => array( __( '%d min' ),   __( '%d mins' ) ), 
     1862        ); 
     1863 
     1864        if ( $seconds ) 
     1865                $units[1] = array( __( '%d sec' ),   __( '%d secs' ) ); 
     1866 
     1867        $units = apply_filters( 'time_units', $units ); 
     1868 
     1869        $from = (int) $from; 
     1870        $to   = (int) $to; 
     1871 
     1872        if ( empty( $to ) ) 
    18521873                $to = time(); 
    1853         $diff = (int) abs($to - $from); 
    1854         if ($diff <= 3600) { 
    1855                 $mins = round($diff / 60); 
    1856                 if ($mins <= 1) { 
    1857                         $mins = 1; 
    1858                 } 
    1859                 /* translators: min=minute */ 
    1860                 $since = sprintf(_n('%s min', '%s mins', $mins), $mins); 
    1861         } else if (($diff <= 86400) && ($diff > 3600)) { 
    1862                 $hours = round($diff / 3600); 
    1863                 if ($hours <= 1) { 
    1864                         $hours = 1; 
    1865                 } 
    1866                 $since = sprintf(_n('%s hour', '%s hours', $hours), $hours); 
    1867         } elseif ($diff >= 86400) { 
    1868                 $days = round($diff / 86400); 
    1869                 if ($days <= 1) { 
    1870                         $days = 1; 
    1871                 } 
    1872                 $since = sprintf(_n('%s day', '%s days', $days), $days); 
     1874 
     1875        $diff = abs( $to - $from ); 
     1876 
     1877        $items = 0; 
     1878        $output = array(); 
     1879 
     1880        foreach ( $units as $unitsec => $unitnames ) { 
     1881                // Stop when the item limit is reached 
     1882                if ( $items >= $limit ) 
     1883                        break; 
     1884 
     1885                // Make sure the unit size is smaller than the remainder seconds 
     1886                if ( $diff < $unitsec ) 
     1887                        continue; 
     1888 
     1889                // Find the whole number of this unit 
     1890                $numthisunits = floor( $diff / $unitsec ); 
     1891                $diff = $diff - ( $numthisunits * $unitsec ); 
     1892                $items++; 
     1893 
     1894                if ( $numthisunits > 0 ) 
     1895                        $output[] = sprintf( _n( $unitnames[0], $unitnames[1], $numthisunits ), $numthisunits ); 
    18731896        } 
    1874         return $since; 
     1897 
     1898        // translators: The seperator for human_time_diff() which seperates the years, months, etc. 
     1899        $seperator = _x( ', ', 'human_time_diff' ); 
     1900 
     1901        if ( ! empty( $output ) ) { 
     1902                if ( is_rtl() ) 
     1903                        $output = array_reverse( $output ); 
     1904 
     1905                return implode( $seperator, $output ); 
     1906        } else { 
     1907                // Return "1 {unit}" with the unit being the smallest unit 
     1908                $smallest = array_pop( $units ); 
     1909                return sprintf( $smallest[0], 1 ); 
     1910        } 
    18751911} 
    18761912 
    18771913/**