Add Unix method to TimeDuration.

This commit is contained in:
Mariano Cano 2019-07-31 12:36:31 -07:00
parent b0240772da
commit 4c1a11c1bc
2 changed files with 38 additions and 1 deletions

View file

@ -113,11 +113,16 @@ func (t *TimeDuration) UnmarshalJSON(data []byte) error {
return errors.Errorf("failed to parse %s", data)
}
// Time calculates the embedded time.Time, sets it if necessary, and returns it.
// Time calculates the time if needed and returns it.
func (t *TimeDuration) Time() time.Time {
return t.RelativeTime(now())
}
// Unix calculates the time if needed it and returns the Unix time in seconds.
func (t *TimeDuration) Unix() int64 {
return t.RelativeTime(now()).Unix()
}
// RelativeTime returns the embedded time.Time or the base time plus the
// duration if this is not zero.
func (t *TimeDuration) RelativeTime(base time.Time) time.Time {

View file

@ -217,6 +217,38 @@ func TestTimeDuration_Time(t *testing.T) {
}
}
func TestTimeDuration_Unix(t *testing.T) {
nowFn := now
defer func() {
now = nowFn
now()
}()
tm := time.Unix(1584198566, 535897000).UTC()
now = func() time.Time {
return tm
}
tests := []struct {
name string
timeDuration *TimeDuration
want int64
}{
{"zero", nil, -62135596800},
{"zero", &TimeDuration{}, -62135596800},
{"timestamp", &TimeDuration{t: tm}, 1584198566},
{"local", &TimeDuration{t: tm.Local()}, 1584198566},
{"duration", &TimeDuration{d: 1 * time.Hour}, 1584202166},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := tt.timeDuration.Unix()
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("TimeDuration.Unix() = %v, want %v", got, tt.want)
}
})
}
}
func TestTimeDuration_String(t *testing.T) {
nowFn := now
defer func() {