Skip to content

Conversation

@apoelstra
Copy link

As we do for datetimes, allow duration UDAs in reports to be formatted in the "vague" human-readable format or as a second-resolution countdown, instead of only the ISO format. I also added tests for the UDA duration output.

Along the way I attempted to support negative durations but was not able to -- see GothenburgBitFactory/libshared#110 for more information. I will open a followup if that PR (or its sister PR 111) gets into libshared.

Because the countdown format for datetime seemed wrong, I fixed it before implementing the same format for duration. Maybe I should have done this in a separate PR? Let me know and I will split it up.

Fixes #3738

Fixes #4013

Copy the unit test from "relative" for the positive case of "countdown",
since the code as implemented for "countdown" is identical to the code
for "relative".

I am including this commit, even though the next commit will override
it, to confirm my understanding of how the existing datetime styles
work. Initially I had gotten myself turned in circles because I misread
the "if now < date then add a - sign" logic as an absolute-value
calculation and badly misunderstood the behavior of "age" and "relative".

See GothenburgBitFactory#4013
The "countdown" format has been the same as the "relative" format, except
that negative durations are not rendered, for about a decade. (There was
a minor fix in GothenburgBitFactory#1840.)

However, the example text shows something that looks like 00:00:00. This
is how "countdown" was originally rendered but this was changed as part of
the "isodate" branch in 995de68. See
GothenburgBitFactory#4013 for more
information.

Fixes GothenburgBitFactory#4013
For compatibility reasons I couldn't simply rename "default", so I just
added a new "iso" as a synonym. While I was in there I added some example
output.

There are currently no tests for UDA durations so I added one.
…format

I just copied the logic for this from ColumnTypeDate. I also grepped around
for other instances of `formatVague`. I don't know what the argument means
but in this project it's set to `true` 100% of the time so I kept it that
way.

I am using the name "age" as suggested in
GothenburgBitFactory#3738
In the same format as ColTypeDatetime.

Fixes GothenburgBitFactory#3738
@apoelstra apoelstra force-pushed the 2025-12/uda-duration branch from 211666e to 0f18031 Compare December 27, 2025 01:20
@tbabej tbabej self-assigned this Jan 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Date "countdown" example does not match the actual style nicer display formats for duration UDAs

2 participants