1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

feat: add Max, Min, and MaxMin for datetime package

This commit is contained in:
dudaodong
2024-11-07 15:47:22 +08:00
parent e2ff83649a
commit 643edc1468
5 changed files with 194 additions and 61 deletions

View File

@@ -443,3 +443,50 @@ func GenerateDatetimesBetween(start, end time.Time, layout string, interval stri
return result, nil
}
// Min returns the earliest time among the given times.
// Play: todo
func Min(t1 time.Time, times ...time.Time) time.Time {
minTime := t1
for _, t := range times {
if t.Before(minTime) {
minTime = t
}
}
return minTime
}
// Max returns the latest time among the given times.
// Play: todo
func Max(t1 time.Time, times ...time.Time) time.Time {
maxTime := t1
for _, t := range times {
if t.After(maxTime) {
maxTime = t
}
}
return maxTime
}
// MaxMin returns the latest and earliest time among the given times.
// Play: todo
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time) {
maxTime = t1
minTime = t1
for _, t := range times {
if t.Before(minTime) {
minTime = t
}
if t.After(maxTime) {
maxTime = t
}
}
return maxTime, minTime
}

View File

@@ -437,3 +437,32 @@ func ExampleGenerateDatetimesBetween() {
// [2024-09-01 00:00:00 2024-09-01 01:00:00 2024-09-01 02:00:00]
// <nil>
}
func ExampleMin() {
result := Min(time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), time.Date(2024, time.September, 2, 0, 0, 0, 0, time.UTC))
fmt.Println(result)
// Output:
// 2024-09-01 00:00:00 +0000 UTC
}
func ExampleMax() {
result := Max(time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), time.Date(2024, time.September, 2, 0, 0, 0, 0, time.UTC))
fmt.Println(result)
// Output:
// 2024-09-02 00:00:00 +0000 UTC
}
func ExampleMaxMin() {
max, min := MaxMin(time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), time.Date(2024, time.September, 2, 0, 0, 0, 0, time.UTC), time.Date(2024, time.September, 3, 0, 0, 0, 0, time.UTC))
fmt.Println(max)
fmt.Println(min)
// Output:
// 2024-09-03 00:00:00 +0000 UTC
// 2024-09-01 00:00:00 +0000 UTC
}

View File

@@ -521,3 +521,60 @@ func TestGenerateDatetimesBetween(t *testing.T) {
}
})
}
func TestMin(t *testing.T) {
t.Parallel()
assert := internal.NewAssert(t, "TestMin")
zeroTime := time.Time{}
now := time.Now()
oneMinuteAgo := now.Add(-time.Minute)
oneMinuteAfter := now.Add(time.Minute)
assert.Equal(zeroTime, Min(zeroTime, now, oneMinuteAgo, oneMinuteAfter))
assert.Equal(zeroTime, Min(now, zeroTime))
assert.Equal(oneMinuteAgo, Min(oneMinuteAgo, now, oneMinuteAfter))
}
func TestMax(t *testing.T) {
t.Parallel()
assert := internal.NewAssert(t, "TestMax")
zeroTime := time.Time{}
now := time.Now()
oneMinuteAgo := now.Add(-time.Minute)
oneMinuteAfter := now.Add(time.Minute)
assert.Equal(oneMinuteAfter, Max(zeroTime, now, oneMinuteAgo, oneMinuteAfter))
assert.Equal(now, Max(now, zeroTime))
assert.Equal(oneMinuteAfter, Max(oneMinuteAgo, now, oneMinuteAfter))
}
func TestMaxMin(t *testing.T) {
t.Parallel()
assert := internal.NewAssert(t, "TestMinMax")
zeroTime := time.Time{}
now := time.Now()
oneMinuteAgo := now.Add(-time.Minute)
oneMinuteAfter := now.Add(time.Minute)
max, min := MaxMin(zeroTime, now, oneMinuteAgo, oneMinuteAfter)
assert.Equal(zeroTime, min)
assert.Equal(oneMinuteAfter, max)
max, min = MaxMin(now, zeroTime)
assert.Equal(zeroTime, min)
assert.Equal(now, max)
max, min = MaxMin(oneMinuteAgo, now, oneMinuteAfter)
assert.Equal(oneMinuteAgo, min)
assert.Equal(oneMinuteAfter, max)
}