duration

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Dec 18, 2019 License: MIT Imports: 9 Imported by: 0

README

iso8601duration

ISO8601 Duration Parser for Golang

Provides a partial implementation of ISO8601 durations. Parsing doesn't take into consideration variable lengths of days (24 vs 25), months (28 vs 31) nor years (365 vs 366). It will default to the following:

  • 1 Day = 24 Hours
  • 1 Month = 30 Days
  • 1 Year = 365 Days

Also, converting back to string will omit months and work with days and weeks, e.g.

INPUT     OUTPUT
P1M       P30D
P1M5D     P5W
P1Y1M5D   P1Y35D

Zero value is set to P0D

Forked from https://github.com/ChannelMeter/iso8601duration (refers to http://github.com/BrianHicks/finch) Updated from https://github.com/retzkek/iso8601duration

Documentation

Overview

Package duration provides a partial implementation of ISO8601 durations. Constant values are assumed for non-constant timespans for convenience 1 Day = 24 Hours 1 Month = 30 Days 1 Year = 365 Days

Index

Constants

View Source
const (
	// Zero is zero value for duration. ISO-8601 mandates at least one element for a zero duration (4.4.3.2.c - page 21)
	Zero = "P0D"
	// Day is an average day duration
	Day = time.Hour * 24
	// Week is an average week duration
	Week = Day * 7
	// Month is an average month duration
	Month = Day * 30
	// Year is an average year duration
	Year = Day * 365
)

Variables

View Source
var (
	// ErrBadFormat is returned when parsing fails
	ErrBadFormat = errors.New("invalid ISO8601 string")
)

Functions

This section is empty.

Types

type Duration

type Duration struct {
	time.Duration
}

Duration is ISO8601 type for your structs that will ensure correct validation and formatting per ISO8601 standard

func ParseString

func ParseString(dur string) (*Duration, error)

ParseString parses string into ISO8601 duration

func (*Duration) Days

func (d *Duration) Days() float64

Days returns duration in whole days

func (*Duration) HasTimePart

func (d *Duration) HasTimePart() bool

HasTimePart checks if duration has time section

func (*Duration) Hours

func (d *Duration) Hours() float64

Hours returns duration in whole hours

func (*Duration) IsWeeksOnly

func (d *Duration) IsWeeksOnly() bool

IsWeeksOnly checks whether duration in whole weeks

func (*Duration) IsZero

func (d *Duration) IsZero() bool

IsZero checks whether duration is zero. Zero value is set to

func (Duration) MarshalJSON

func (d Duration) MarshalJSON() ([]byte, error)

MarshalJSON converts Duration into json value

func (*Duration) Minutes

func (d *Duration) Minutes() float64

Minutes returns duration in whole minutes

func (*Duration) Seconds

func (d *Duration) Seconds() float64

Seconds returns duration in whole seconds

func (*Duration) String

func (d *Duration) String() string

String prints out the value passed in. It's not strictly according to the ISO spec, but it's pretty close. In particular, months are not returned. Instead, it returns a value in days (1D ~ 364D) or weeks (1W ~ 52W) whenever possible.

func (*Duration) ToDuration

func (d *Duration) ToDuration() time.Duration

ToDuration converst ISO8001 duration into time.Duration

func (*Duration) UnmarshalJSON

func (d *Duration) UnmarshalJSON(data []byte) error

UnmarshalJSON validates json against Duration type

func (*Duration) Weeks

func (d *Duration) Weeks() float64

Weeks returns duration in whole weeks

func (*Duration) Years

func (d *Duration) Years() float64

Years returns duration in whole years

Jump to

Keyboard shortcuts

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