durationformat

package
v0.2.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Overview

Package durationformat implements the ECMA-402 Intl.DurationFormat constructor.

locales, _ := locale.ParseList("en-US")
format, _ := durationformat.New(locales, durationformat.Options{})
out, _ := format.Format(durationformat.Duration{Hours: 1, Minutes: 2})
_ = out

See README.md for usage examples and SPECS/43-durationformat.md for the contract.

Example

Example demonstrates Intl.DurationFormat.prototype.format from ECMA-402.

package main

import (
	"fmt"

	"github.com/agentable/go-intl/durationformat"
	"github.com/agentable/go-intl/locale"
)

func main() {
	format, err := durationformat.New(mustLocaleList("en"), durationformat.Options{
		Style: durationformat.DigitalStyle,
	})
	if err != nil {
		panic(err)
	}

	out, err := format.Format(durationformat.Duration{
		Hours:   1,
		Minutes: 2,
		Seconds: 3,
	})
	if err != nil {
		panic(err)
	}

	fmt.Println(out)

}

func mustLocaleList(tags ...string) locale.List {
	locales, err := locale.ParseList(tags...)
	if err != nil {
		panic(err)
	}
	return locales
}
Output:
1:02:03
Example (Options)

Example_options demonstrates Intl.DurationFormat constructor options from ECMA-402.

package main

import (
	"fmt"

	"github.com/agentable/go-intl/durationformat"
	"github.com/agentable/go-intl/locale"
)

func main() {
	format, err := durationformat.New(mustLocaleList("en"), durationformat.Options{
		Style: durationformat.LongStyle,
	})
	if err != nil {
		panic(err)
	}

	out, err := format.Format(durationformat.Duration{
		Hours:   1,
		Minutes: 2,
	})
	if err != nil {
		panic(err)
	}

	fmt.Println(out)

}

func mustLocaleList(tags ...string) locale.List {
	locales, err := locale.ParseList(tags...)
	if err != nil {
		panic(err)
	}
	return locales
}
Output:
1 hour, 2 minutes

Index

Examples

Constants

View Source
const (
	LookupLocaleMatcher  LocaleMatcher = "lookup"
	BestFitLocaleMatcher LocaleMatcher = "best fit"

	LongStyle    Style = "long"
	ShortStyle   Style = "short"
	NarrowStyle  Style = "narrow"
	DigitalStyle Style = "digital"

	LongUnitStyle     UnitStyle = "long"
	ShortUnitStyle    UnitStyle = "short"
	NarrowUnitStyle   UnitStyle = "narrow"
	NumericUnitStyle  UnitStyle = "numeric"
	TwoDigitUnitStyle UnitStyle = "2-digit"

	AlwaysDisplay Display = "always"
	AutoDisplay   Display = "auto"

	Year        Unit = "year"
	Month       Unit = "month"
	Week        Unit = "week"
	Day         Unit = "day"
	Hour        Unit = "hour"
	Minute      Unit = "minute"
	Second      Unit = "second"
	Millisecond Unit = "millisecond"
	Microsecond Unit = "microsecond"
	Nanosecond  Unit = "nanosecond"

	// PartType values emitted by Format/FormatToParts.
	// ECMA-402 §18.5.5 PartitionDurationFormatPattern combines list-pattern
	// literals, digital separators, and embedded NumberFormat partition records.
	// DurationFormat's embedded NumberFormat uses Style="unit" (long/short/narrow)
	// or Style="decimal" (2-digit/numeric); other notations are not exposed,
	// so only the constants below can appear.
	PartLiteral   PartType = "literal"
	PartInteger   PartType = "integer"
	PartGroup     PartType = "group"
	PartDecimal   PartType = "decimal"
	PartFraction  PartType = "fraction"
	PartPlusSign  PartType = "plusSign"
	PartMinusSign PartType = "minusSign"
	PartInfinity  PartType = "infinity"
	PartNaN       PartType = "nan"
	PartUnit      PartType = "unit"
)

Variables

This section is empty.

Functions

func SupportedLocalesOf

func SupportedLocalesOf(locales locale.List, opts Options) (locale.List, error)

Types

type Display

type Display string

type Duration

type Duration struct {
	Years        int64 `json:"years"`
	Months       int64 `json:"months"`
	Weeks        int64 `json:"weeks"`
	Days         int64 `json:"days"`
	Hours        int64 `json:"hours"`
	Minutes      int64 `json:"minutes"`
	Seconds      int64 `json:"seconds"`
	Milliseconds int64 `json:"milliseconds"`
	Microseconds int64 `json:"microseconds"`
	Nanoseconds  int64 `json:"nanoseconds"`
}

type DurationFormat

type DurationFormat struct {
	// contains filtered or unexported fields
}

func New

func New(locales locale.List, opts Options) (*DurationFormat, error)

func (*DurationFormat) Format

func (f *DurationFormat) Format(duration Duration) (string, error)

func (*DurationFormat) FormatToParts

func (f *DurationFormat) FormatToParts(duration Duration) ([]Part, error)
Example

ExampleDurationFormat_FormatToParts demonstrates Intl.DurationFormat.prototype.formatToParts from ECMA-402.

package main

import (
	"fmt"

	"github.com/agentable/go-intl/durationformat"
	"github.com/agentable/go-intl/locale"
)

func main() {
	format, err := durationformat.New(mustLocaleList("en"), durationformat.Options{
		Style: durationformat.DigitalStyle,
	})
	if err != nil {
		panic(err)
	}

	parts, err := format.FormatToParts(durationformat.Duration{
		Hours:   1,
		Minutes: 2,
		Seconds: 3,
	})
	if err != nil {
		panic(err)
	}
	for _, part := range parts {
		fmt.Printf("%s=%q unit=%q\n", part.Type, part.Value, part.Unit)
	}

}

func mustLocaleList(tags ...string) locale.List {
	locales, err := locale.ParseList(tags...)
	if err != nil {
		panic(err)
	}
	return locales
}
Output:
integer="1" unit="hour"
literal=":" unit=""
integer="02" unit="minute"
literal=":" unit=""
integer="03" unit="second"

func (*DurationFormat) ResolvedOptions

func (f *DurationFormat) ResolvedOptions() ResolvedOptions

type LocaleMatcher

type LocaleMatcher string

type Options

type Options struct {
	LocaleMatcher       LocaleMatcher
	NumberingSystem     string
	Style               Style
	Years               UnitStyle
	YearsDisplay        Display
	Months              UnitStyle
	MonthsDisplay       Display
	Weeks               UnitStyle
	WeeksDisplay        Display
	Days                UnitStyle
	DaysDisplay         Display
	Hours               UnitStyle
	HoursDisplay        Display
	Minutes             UnitStyle
	MinutesDisplay      Display
	Seconds             UnitStyle
	SecondsDisplay      Display
	Milliseconds        UnitStyle
	MillisecondsDisplay Display
	Microseconds        UnitStyle
	MicrosecondsDisplay Display
	Nanoseconds         UnitStyle
	NanosecondsDisplay  Display
	FractionalDigits    *int
}

type Part

type Part struct {
	Type  PartType `json:"type"`
	Value string   `json:"value"`
	Unit  Unit     `json:"unit,omitempty"`
}

type PartType

type PartType string

type ResolvedOptions

type ResolvedOptions struct {
	// Locale is the resolved locale. Mirrors Intl.DurationFormat resolved option "locale".
	Locale locale.Locale `json:"locale"`
	// NumberingSystem is the resolved numbering system. Mirrors Intl.DurationFormat resolved option "numberingSystem".
	NumberingSystem string `json:"numberingSystem"`
	// Style is the resolved overall style. Mirrors Intl.DurationFormat resolved option "style".
	Style Style `json:"style"`
	// Years is the resolved years unit style. Mirrors Intl.DurationFormat resolved option "years".
	Years UnitStyle `json:"years"`
	// YearsDisplay is the resolved years display. Mirrors Intl.DurationFormat resolved option "yearsDisplay".
	YearsDisplay Display `json:"yearsDisplay"`
	// Months is the resolved months unit style. Mirrors Intl.DurationFormat resolved option "months".
	Months UnitStyle `json:"months"`
	// MonthsDisplay is the resolved months display. Mirrors Intl.DurationFormat resolved option "monthsDisplay".
	MonthsDisplay Display `json:"monthsDisplay"`
	// Weeks is the resolved weeks unit style. Mirrors Intl.DurationFormat resolved option "weeks".
	Weeks UnitStyle `json:"weeks"`
	// WeeksDisplay is the resolved weeks display. Mirrors Intl.DurationFormat resolved option "weeksDisplay".
	WeeksDisplay Display `json:"weeksDisplay"`
	// Days is the resolved days unit style. Mirrors Intl.DurationFormat resolved option "days".
	Days UnitStyle `json:"days"`
	// DaysDisplay is the resolved days display. Mirrors Intl.DurationFormat resolved option "daysDisplay".
	DaysDisplay Display `json:"daysDisplay"`
	// Hours is the resolved hours unit style. Mirrors Intl.DurationFormat resolved option "hours".
	Hours UnitStyle `json:"hours"`
	// HoursDisplay is the resolved hours display. Mirrors Intl.DurationFormat resolved option "hoursDisplay".
	HoursDisplay Display `json:"hoursDisplay"`
	// Minutes is the resolved minutes unit style. Mirrors Intl.DurationFormat resolved option "minutes".
	Minutes UnitStyle `json:"minutes"`
	// MinutesDisplay is the resolved minutes display. Mirrors Intl.DurationFormat resolved option "minutesDisplay".
	MinutesDisplay Display `json:"minutesDisplay"`
	// Seconds is the resolved seconds unit style. Mirrors Intl.DurationFormat resolved option "seconds".
	Seconds UnitStyle `json:"seconds"`
	// SecondsDisplay is the resolved seconds display. Mirrors Intl.DurationFormat resolved option "secondsDisplay".
	SecondsDisplay Display `json:"secondsDisplay"`
	// Milliseconds is the resolved milliseconds unit style. Mirrors Intl.DurationFormat resolved option "milliseconds".
	Milliseconds UnitStyle `json:"milliseconds"`
	// MillisecondsDisplay is the resolved milliseconds display. Mirrors Intl.DurationFormat resolved option "millisecondsDisplay".
	MillisecondsDisplay Display `json:"millisecondsDisplay"`
	// Microseconds is the resolved microseconds unit style. Mirrors Intl.DurationFormat resolved option "microseconds".
	Microseconds UnitStyle `json:"microseconds"`
	// MicrosecondsDisplay is the resolved microseconds display. Mirrors Intl.DurationFormat resolved option "microsecondsDisplay".
	MicrosecondsDisplay Display `json:"microsecondsDisplay"`
	// Nanoseconds is the resolved nanoseconds unit style. Mirrors Intl.DurationFormat resolved option "nanoseconds".
	Nanoseconds UnitStyle `json:"nanoseconds"`
	// NanosecondsDisplay is the resolved nanoseconds display. Mirrors Intl.DurationFormat resolved option "nanosecondsDisplay".
	NanosecondsDisplay Display `json:"nanosecondsDisplay"`
	// FractionalDigits is the resolved fractional digit count. Mirrors Intl.DurationFormat resolved option "fractionalDigits".
	// Nil when ECMA-402 omits fractionalDigits because the option was absent.
	FractionalDigits *int `json:"fractionalDigits,omitempty"`
}

type Style

type Style string

type Unit

type Unit string

type UnitStyle

type UnitStyle string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL