diff --git a/datetime/datetime.go b/datetime/datetime.go index ea2e59c..9db6d36 100644 --- a/datetime/datetime.go +++ b/datetime/datetime.go @@ -411,3 +411,12 @@ func getCallerName() string { return fullName } + +// DaysBetween returns the number of days between two times. +// Play: todo +func DaysBetween(start, end time.Time) int { + duration := end.Sub(start) + days := int(duration.Hours() / 24) + + return days +} diff --git a/datetime/datetime_example_test.go b/datetime/datetime_example_test.go index 4973b69..3abf5a0 100644 --- a/datetime/datetime_example_test.go +++ b/datetime/datetime_example_test.go @@ -409,16 +409,14 @@ func ExampleIsWeekend() { // false } -// func ExampleTrackFuncTime() { -// defer TrackFuncTime(time.Now())() +func ExampleDaysBetween() { + start := time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC) + end := time.Date(2024, time.September, 10, 0, 0, 0, 0, time.UTC) -// var n int -// for i := 0; i < 5000000; i++ { -// n++ -// } + result := DaysBetween(start, end) -// fmt.Println(1) + fmt.Println(result) -// // Output: -// // 1 -// } + // Output: + // 9 +} diff --git a/datetime/datetime_test.go b/datetime/datetime_test.go index 1e3202e..9b54661 100644 --- a/datetime/datetime_test.go +++ b/datetime/datetime_test.go @@ -419,3 +419,46 @@ func TestTrackFuncTime(t *testing.T) { n++ } } + +func TestDaysBetween(t *testing.T) { + t.Parallel() + + assert := internal.NewAssert(t, "TestDaysBetween") + + tests := []struct { + start time.Time + end time.Time + expected int + }{ + { + start: time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), + end: time.Date(2024, time.September, 10, 0, 0, 0, 0, time.UTC), + expected: 9, + }, + { + start: time.Date(2024, time.September, 10, 0, 0, 0, 0, time.UTC), + end: time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), + expected: -9, + }, + { + start: time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), + end: time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC), + expected: 0, + }, + { + start: time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC), + end: time.Date(2024, time.December, 31, 0, 0, 0, 0, time.UTC), + expected: 365, + }, + { + start: time.Date(2024, time.March, 1, 0, 0, 0, 0, time.UTC), + end: time.Date(2024, time.March, 31, 0, 0, 0, 0, time.UTC), + expected: 30, + }, + } + + for _, tt := range tests { + result := DaysBetween(tt.start, tt.end) + assert.Equal(tt.expected, result) + } +} diff --git a/docs/api/packages/datetime.md b/docs/api/packages/datetime.md index 8b56061..953d087 100644 --- a/docs/api/packages/datetime.md +++ b/docs/api/packages/datetime.md @@ -65,6 +65,7 @@ import ( - [TimestampMicro](#TimestampMicro) - [TimestampNano](#TimestampNano) - [TrackFuncTime](#TrackFuncTime) +- [DaysBetween](#DaysBetween)
@@ -1497,4 +1498,37 @@ func main() { fmt.Println(1) // Function main execution time: 1.460287ms } +``` + +### DaysBetween + +返回两个日期之间的天数差。
+ +函数签名: + +```go +func DaysBetween(start, end time.Time) int +``` + +示例:[运行]() + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/datetime" +) + +func main() { + start := time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC) + end := time.Date(2024, time.September, 10, 0, 0, 0, 0, time.UTC) + + result := datetime.DaysBetween(start, end) + + fmt.Println(result) + + // Output: + // 9 +} ``` \ No newline at end of file diff --git a/docs/en/api/packages/datetime.md b/docs/en/api/packages/datetime.md index 7f88534..a19fb92 100644 --- a/docs/en/api/packages/datetime.md +++ b/docs/en/api/packages/datetime.md @@ -1498,3 +1498,36 @@ func main() { fmt.Println(1) // Function main execution time: 1.460287ms } ``` + +### DaysBetween + +Returns the number of days between two times.
+ +Signature: + +```go +func DaysBetween(start, end time.Time) int +``` + +Example:[Run]() + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/datetime" +) + +func main() { + start := time.Date(2024, time.September, 1, 0, 0, 0, 0, time.UTC) + end := time.Date(2024, time.September, 10, 0, 0, 0, 0, time.UTC) + + result := datetime.DaysBetween(start, end) + + fmt.Println(result) + + // Output: + // 9 +} +``` \ No newline at end of file