From 46b53b1d7588959e8c9219235fd166a12f39521d Mon Sep 17 00:00:00 2001 From: Jake Wang Date: Fri, 18 Sep 2026 22:22:56 -0400 Subject: [PATCH] fix(model): floor negative Unix timestamps to seconds --- model/time.go | 2 +- model/time_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/model/time.go b/model/time.go index 98607174..1f0f0f5e 100644 --- a/model/time.go +++ b/model/time.go @@ -99,7 +99,7 @@ func (t Time) Time() time.Time { // Unix returns t as a Unix time, the number of seconds elapsed // since January 1, 1970 UTC. func (t Time) Unix() int64 { - return int64(t) / second + return t.Time().Unix() } // UnixNano returns t as a Unix time, the number of nanoseconds elapsed diff --git a/model/time_test.go b/model/time_test.go index abefaa4b..720ca35a 100644 --- a/model/time_test.go +++ b/model/time_test.go @@ -55,6 +55,30 @@ func TestTimeConversions(t *testing.T) { require.Equalf(t, ts.UnixNano(), unixNano-unixNano%nanosPerTick, "Expected %d, got %d", unixNano, ts.UnixNano()) } +func TestTimeUnix(t *testing.T) { + for _, tc := range []struct { + milliseconds Time + seconds int64 + }{ + {Earliest, -9223372036854776}, + {-1001, -2}, + {-1000, -1}, + {-999, -1}, + {-1, -1}, + {0, 0}, + {1, 0}, + {999, 0}, + {1000, 1}, + {1001, 1}, + {Latest, 9223372036854775}, + } { + t.Run(strconv.FormatInt(int64(tc.milliseconds), 10), func(t *testing.T) { + require.Equal(t, tc.seconds, tc.milliseconds.Unix()) + require.Equal(t, tc.milliseconds.Time().Unix(), tc.milliseconds.Unix()) + }) + } +} + func TestDuration(t *testing.T) { duration := time.Second + time.Minute + time.Hour goTime := time.Unix(1136239445, 0)