Skip to content

Cannot get format=relative to display seconds #269

Description

@bear24rw

I cannot get relative format to display second level precision. The docs suggest that the default precision is seconds and this table suggests that with format relative i should see seconds. But I only see now until 1 minute has passed. format=elapsed works as i expect.

image
<html>
  <body>
    <p>Loaded this page <relative-time datetime="" format="relative" id="dynamic1"></relative-time></p>
    <p>You've been on this page for <relative-time datetime="" format="duration" id="dynamic2"></relative-time></p>
    <script type="module" src="https://unpkg.com/@github/relative-time-element@latest/dist/bundle.js"></script>
    <script>
    document.getElementById('dynamic1').date = new Date()
    document.getElementById('dynamic2').date = new Date()
    </script>
  </body>
</html>

Activity

  1. keithamus commented on Nov 14, 2023

    @keithamus
    Contributor

    Sounds like this is a bug. Following the code I can't see where there's a problem. If you would kindly submit a PR with some failing tests we can investigate further.

  2. rhcarvalho commented on Feb 14, 2024

    @rhcarvalho

    Of the non-deprecated formats, only format="duration" is showing and updating with seconds precision.
    The default (no format attribute) and format="relative" doesn't update until after 1 min has passed.

    duration is not a replacement for relative because it doesn't have the prefix/suffix: "X seconds" vs "X seconds ago".

    Tested with v4.3.1.


    I think I found the issue debugging with devtools:

    } else if (format === 'relative') {
    newText = this.#getRelativeFormat(duration)

    #getRelativeFormat(duration: Duration): string {

    if (unit === 'second' && int < 10) {
    return relativeFormat.format(0, 'second')
    }

    Times in the past (like -X seconds) would always enter the if branch and format the value 0 ("now") instead of the number of seconds.

    Maybe what was meant is:

        if (unit === 'second' && Math.abs(int) < 10) {
            return relativeFormat.format(0, 'second');
        }

    Such that we don't show "now", 1, 2, 3..., 9, but instead go "now", 10, 11, ...

    I'm not sure though, I think that's unspecified behavior.

    I traced it back to 6118a16.

  3. thiagomajesk commented on Jul 28, 2024

    @thiagomajesk

    Of the non-deprecated formats, only format="duration" is showing and updating with seconds precision. The default (no format attribute) and format="relative" doesn't update until after 1 min has passed.

    @keithamus I can confirm that second precision only work with format="duration". Also, thanks @rhcarvalho for diving into the code. Are you using another in the meantime?

  4. rhcarvalho commented on Jul 28, 2024

    @rhcarvalho

    @thiagomajesk I think I chose some format that worked well enough and moved on.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions