Uploaded image for project: 'phpBB3'
  1. phpBB3
  2. PHPBB3-9712

Future dates display as "less than one minute ago"

    Details

    • Type: Bug
    • Status: Unverified Fix
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 3.0.7-PL1, 3.1.0-dev
    • Fix Version/s: 3.0.8-RC1
    • Component/s: Other
    • Labels:
      None

      Description

      There are some cases when future dates display as less than a minute ago, which is really annoying for mods.
      And also may affect phpbb on end of ban/poll dates.

      Testing cases:
      Set your date-format to something with || so it's shortened
      than put something like:

      echo $user->format_date(time() - 30) . '<br />';
      echo $user->format_date(time()) . '<br />';
      echo $user->format_date(time() + 3600) . '<br />';
      echo $user->format_date(time() + 7200) . '<br />';

      into your index.php

      what you would expect is:

      less than a minute ago
      less than a minute ago
      Today 11:21:16
      Today 12:21:16

      but what you get is:

      less than a minute ago
      less than a minute ago
      less than a minute ago
      less than a minute ago

      the reason for this is, from the current code:

      		if ($delta <= 3600 && ($delta >= -5 || (($now / 60) % 60) == (($gmepoch / 60) % 60)) && $date_cache[$format]['is_short'] !== false && !$forcedate && isset($this->lang['datetime']['AGO']))
      

      $delta is -3600 and -7200 so both times <= 3600 and (($now / 60) % 60) == (($gmepoch / 60) % 60) is also true, as they are the same minute (doesn't care about the hour yet).

      two possibilities I'd suggest:

      • Remove detecting the minute, so it's only displayed as "less than a minute ago, when it is ago or the 5 seconds in future:

        if ($delta <= 3600 && ($delta >= -5) && $date_cache[$format]['is_short'] !== false && !$forcedate && isset($this->lang['datetime']['AGO']))

      • or if you want to keep the detecting of the whole minute (which I think is wrong, as it may still take 59 seconds in some cases ) add a "$delta > -60 &&" to the minute-check:

        if ($delta <= 3600 && ($delta >= -5 || ($delta > -60 && (($now / 60) % 60) == (($gmepoch / 60) % 60))) && $date_cache[$format]['is_short'] !== false && !$forcedate && isset($this->lang['datetime']['AGO']))


        I'd prefer the first version.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                ToonArmy Chris Smith
                Reporter:
                nickvergessen Joas Schilling
              • Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: