Make WordPress Core

Ticket #38773: 38773.3.diff

File 38773.3.diff, 3.7 KB (added by adamsilverstein, 8 years ago)
  • src/wp-includes/formatting.php

     
    32143214        $diff = (int) abs( $to - $from );
    32153215
    32163216        if ( $diff < HOUR_IN_SECONDS ) {
    3217                 $mins = round( $diff / MINUTE_IN_SECONDS );
     3217                $mins = floor( $diff / MINUTE_IN_SECONDS );
    32183218                if ( $mins <= 1 )
    32193219                        $mins = 1;
    32203220                /* translators: min=minute */
    32213221                $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins );
    32223222        } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
    3223                 $hours = round( $diff / HOUR_IN_SECONDS );
     3223                $hours = floor( $diff / HOUR_IN_SECONDS );
    32243224                if ( $hours <= 1 )
    32253225                        $hours = 1;
    32263226                $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
    32273227        } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
    3228                 $days = round( $diff / DAY_IN_SECONDS );
     3228                $days = floor( $diff / DAY_IN_SECONDS );
    32293229                if ( $days <= 1 )
    32303230                        $days = 1;
    32313231                $since = sprintf( _n( '%s day', '%s days', $days ), $days );
    32323232        } elseif ( $diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
    3233                 $weeks = round( $diff / WEEK_IN_SECONDS );
     3233                $weeks = floor( $diff / WEEK_IN_SECONDS );
    32343234                if ( $weeks <= 1 )
    32353235                        $weeks = 1;
    32363236                $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks );
    32373237        } elseif ( $diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS ) {
    3238                 $months = round( $diff / MONTH_IN_SECONDS );
     3238                $months = floor( $diff / MONTH_IN_SECONDS );
    32393239                if ( $months <= 1 )
    32403240                        $months = 1;
    32413241                $since = sprintf( _n( '%s month', '%s months', $months ), $months );
    32423242        } elseif ( $diff >= YEAR_IN_SECONDS ) {
    3243                 $years = round( $diff / YEAR_IN_SECONDS );
     3243                $years = floor( $diff / YEAR_IN_SECONDS );
    32443244                if ( $years <= 1 )
    32453245                        $years = 1;
    32463246                $since = sprintf( _n( '%s year', '%s years', $years ), $years );
  • tests/phpunit/tests/formatting/HumanTimeDiff.php

     
     1<?php
     2
     3/**
     4 * @group formatting
     5 * @ticket 38773
     6 */
     7class Tests_Formatting_HiumanTimeDiff extends WP_UnitTestCase {
     8        function test_simple() {
     9                // Test some basic differences such as "1 hour", "5 mins", "2 days".
     10                $startdate = new DateTime( '2016-01-01 12:00:00' );
     11
     12                // Test a difference of 5 minutes.
     13                $stopdate = new DateTime( '2016-01-01 12:05:00' );
     14                $this->assertEquals( '5 mins', human_time_diff( $startdate->getTimestamp(), $stopdate->getTimestamp() ) );
     15
     16                // Test a difference of 1 hour.
     17                $stopdate = new DateTime( '2016-01-01 13:00:00' );
     18                $this->assertEquals( '1 hour', human_time_diff( $startdate->getTimestamp(), $stopdate->getTimestamp() ) );
     19
     20                // Test a difference of 2 days.
     21                $stopdate = new DateTime( '2016-01-03 12:00:00' );
     22                $this->assertEquals( '2 days', human_time_diff( $startdate->getTimestamp(), $stopdate->getTimestamp() ) );
     23        }
     24        function test_rounding() {
     25                // Test some close dates for rounding issues.
     26                $startdate = new DateTime( '2016-01-01 12:00:00' );
     27
     28                // Test a difference of 2 hours and 30 minutes and 1 second.
     29                $stopdate = new DateTime( '2016-01-01 14:30:01' );
     30                $this->assertEquals( '2 hours', human_time_diff( $startdate->getTimestamp(), $stopdate->getTimestamp() ) );
     31
     32                // Test a difference of 1 month and 16 days.
     33                $stopdate = new DateTime( '2016-02-17 12:00:00' );
     34                $this->assertEquals( '1 month', human_time_diff( $startdate->getTimestamp(), $stopdate->getTimestamp() ) );
     35
     36                // Test a difference of 2 years 6 months and 1 day.
     37                $stopdate = new DateTime( '2018-07-02 12:00:00' );
     38                $this->assertEquals( '2 years', human_time_diff( $startdate->getTimestamp(), $stopdate->getTimestamp() ) );
     39        }
     40
     41}