The timeutil package provides human-readable duration formatting utilities.
This package contains helpers for converting time.Duration values and raw numeric durations (milliseconds, nanoseconds) into compact, readable strings. The primary formatting style follows the debug npm package conventions used by the logger package.
Formats a time.Duration for display. Provides granular output from nanoseconds to hours.
| Range | Example output |
|---|---|
< 1µs |
"500ns" |
1µs – < 1ms |
"250µs" |
1ms – < 1s |
"750ms" |
1s – < 1min |
"2.5s" |
1min – < 1h |
"1.3m" |
≥ 1h |
"2.0h" |
import "github.com/github/gh-aw/pkg/timeutil"
timeutil.FormatDuration(500 * time.Millisecond) // "500ms"
timeutil.FormatDuration(2500 * time.Millisecond) // "2.5s"
timeutil.FormatDuration(90 * time.Second) // "1.5m"Formats a duration given in milliseconds as a human-readable string.
| Range | Example |
|---|---|
< 1000ms |
"500ms" |
1000ms – < 60s |
"1.5s" |
≥ 60s |
"1m30s" |
timeutil.FormatDurationMs(500) // "500ms"
timeutil.FormatDurationMs(1500) // "1.5s"
timeutil.FormatDurationMs(90000) // "1m30s"Formats a duration given in nanoseconds as a human-readable string. Returns "—" for zero or negative values. Uses Go's standard time.Duration.Round(time.Second) for output.
timeutil.FormatDurationNs(0) // "—"
timeutil.FormatDurationNs(2_500_000_000) // "2s"
timeutil.FormatDurationNs(90_000_000_000) // "1m30s"FormatDurationis used by theloggerpackage to display time-diff between consecutive log calls (the+500mssuffix in debug output).FormatDurationMsis used for workflow run duration display, where GitHub Actions reports durations in milliseconds.FormatDurationNsis used for job duration display, where GitHub Actions reports billing durations in nanoseconds.