diff --git a/cryptor/rsa_private_example.pem b/cryptor/rsa_private_example.pem index 90ef571..c31daff 100644 --- a/cryptor/rsa_private_example.pem +++ b/cryptor/rsa_private_example.pem @@ -1,51 +1,51 @@ -----BEGIN rsa private key----- -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 -----END rsa private key----- diff --git a/cryptor/rsa_public_example.pem b/cryptor/rsa_public_example.pem index 98918f7..ec76f1d 100644 --- a/cryptor/rsa_public_example.pem +++ b/cryptor/rsa_public_example.pem @@ -1,14 +1,14 @@ -----BEGIN rsa public key----- -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAof7+5KVH6s/ID7onVeuC -PVGPIW6TiHHjDlxbYLdA/CyhTvR2Pk8JvX9BjBXLI/+jTWsyTUucwszu3MaVhIS/ -gzoLKjr5meVp+HEcFe98s4XRYhob2cdpDo+Jty8Vuodz5T2nYkIZP/oyJNmQCBYD -e20nBwmjjFfworEvwNy2fSucs8wrlJT2Xqy4oHZqERWvnIJZtBshX9//9Pw3m/Gu -pHeBFBNW2omWCQm4aTEbeepkXloTgVQ75FEpyyjNjDi+OG/Om2v5l+XCvOcV39Hc -7sBovDFNX6w39zQSIKiMpFkxciKP9SPbqZz+Vv0iyUPKxi2gXwbgy0+k2aTQlsPS -976+2/4QgLReU3Ujeh8Q6oRwB8HRfPlD7aY+dGPMT16o1R3nhs2jwsGId812lw5q -gjaYZJCXCBhQcZFs+1IM7c6GmIGXYIAcFDWiVsENqqesQO5tCA1UTTGtIa9kMYD/ -pwFK1ANVvrr2c6Qu/0UuBneawok76vDHTQCWmVcF0QIe5RaTj8YK9TaNAcQDPy9j -M0jWxJE1EBuRpDtIymQIcgMpXwguerh9NuXNoGEVPn4mvlVfy+1TVGzws8WsZwY/ -LH07afdfIeDc1YwLadwq5S+wxuzwNuSCM9t2rIzfbRhorlg/lVDWqP8H6d9vF5MJ -Y9kSiO3KgCSJLYfVl+Q+8asCAwEAAQ== +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5bsUtFZmae/9D6ncFO62 +EaaGxoc0+/ZXqi2OtHZYpaDV0/bLV0gegTIQ5+kUJr0VQ/9GMEnALdGNBT9bJ0Mv +7VWZijYoyUOQ4fB4k8vaytFcug/kMYkvE+pvXg6JMbp9rZXXiz5djabAKv9ZrClU +ugnK8KPtn+6SnCC4oKVhMRj2G+5LAxYhiidSrnK8xkgts4OwLTzqWw9N2QMvdkXj +wwaIG5UeDqeal0/hna402j6/QbANq/brR2eXHfxVrX9eMKBdA6OmVPeFUVb+JR/p +2TvNEEXRM/DmPP70HXg08L1XIjvaZm7MNbcqS+6AUciwWNshm8o4vFkyjN1E3U5s +yYptCEtDYA/+GPFzbzCzSyaTxBpdxSI6wB9Vt+Hk/DzS3RBoxj4xYk2LmPDX6i86 +skBTQ9X3sUdWUoelyAko8JW+sXlXMQP05yNyBY+fayzhHfYYsi+4jpV4uLMY7bXe +ySffROdiEQ9xXCf3trq2isKReHhYhmu7mnjIn+CcJZ909XzMJmN6zEeSTeXZMDqP +K1dv3Yom6n/oRpR+rfx8JYCKTFR/+QYPGR1kc+LUyqgFcWwTexf3CfL3ck0H0iG7 +ivGV6wm9xvpOxbQb+4/79jQLtoBC8goU9KXuxYEs2aE4/LM8zY4QpHDIZYLoHnz2 +xSgm+rlh6E4p0t5mik3wOAUCAwEAAQ== -----END rsa public key----- diff --git a/datetime/datetime.go b/datetime/datetime.go index a9a3814..d61fa67 100644 --- a/datetime/datetime.go +++ b/datetime/datetime.go @@ -64,28 +64,40 @@ func init() { } } -// AddMinute add or sub minute to the time. +// AddMinute add or sub minutes to the time. // Play: https://go.dev/play/p/nT1heB1KUUK -func AddMinute(t time.Time, minute int64) time.Time { - return t.Add(time.Minute * time.Duration(minute)) +func AddMinute(t time.Time, minutes int64) time.Time { + return t.Add(time.Minute * time.Duration(minutes)) } -// AddHour add or sub hour to the time. +// AddHour add or sub hours to the time. // Play: https://go.dev/play/p/rcMjd7OCsi5 -func AddHour(t time.Time, hour int64) time.Time { - return t.Add(time.Hour * time.Duration(hour)) +func AddHour(t time.Time, hours int64) time.Time { + return t.Add(time.Hour * time.Duration(hours)) } -// AddDay add or sub day to the time. +// AddDay add or sub days to the time. // Play: https://go.dev/play/p/dIGbs_uTdFa -func AddDay(t time.Time, day int64) time.Time { - return t.Add(24 * time.Hour * time.Duration(day)) +func AddDay(t time.Time, days int64) time.Time { + return t.Add(24 * time.Hour * time.Duration(days)) +} + +// AddWeek add or sub weeks to the time. +// play: todo +func AddWeek(t time.Time, weeks int64) time.Time { + return t.Add(7 * 24 * time.Hour * time.Duration(weeks)) +} + +// AddMonth add or sub months to the time. +// Play: todo +func AddMonth(t time.Time, months int64) time.Time { + return t.AddDate(0, int(months), 0) } // AddYear add or sub year to the time. // Play: https://go.dev/play/p/MqW2ujnBx10 func AddYear(t time.Time, year int64) time.Time { - return t.Add(365 * 24 * time.Hour * time.Duration(year)) + return t.AddDate(int(year), 0, 0) } // GetNowDate return format yyyy-mm-dd of current date. diff --git a/datetime/datetime_example_test.go b/datetime/datetime_example_test.go index da0b1c5..7b3fec7 100644 --- a/datetime/datetime_example_test.go +++ b/datetime/datetime_example_test.go @@ -7,71 +7,87 @@ import ( ) func ExampleAddDay() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - tomorrow := AddDay(now, 1) - diff1 := tomorrow.Sub(now) + after1Day := AddDay(date, 1) + before1Day := AddDay(date, -1) - yesterday := AddDay(now, -1) - diff2 := yesterday.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after1Day.Format("2006-01-02 15:04:05")) + fmt.Println(before1Day.Format("2006-01-02 15:04:05")) // Output: - // 24h0m0s - // -24h0m0s + // 2021-01-02 00:00:00 + // 2020-12-31 00:00:00 +} + +func ExampleAddWeek() { + date, _ := time.Parse("2006-01-02", "2021-01-01") + + after2Weeks := AddWeek(date, 2) + before2Weeks := AddWeek(date, -2) + + fmt.Println(after2Weeks.Format("2006-01-02")) + fmt.Println(before2Weeks.Format("2006-01-02")) + + // Output: + // 2021-01-15 + // 2020-12-18 +} + +func ExampleAddMonth() { + date, _ := time.Parse("2006-01-02", "2021-01-01") + + after2Months := AddMonth(date, 2) + before2Months := AddMonth(date, -2) + + fmt.Println(after2Months.Format("2006-01-02")) + fmt.Println(before2Months.Format("2006-01-02")) + + // Output: + // 2021-03-01 + // 2020-11-01 } func ExampleAddHour() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - after2Hours := AddHour(now, 2) - diff1 := after2Hours.Sub(now) + after2Hours := AddHour(date, 2) + before2Hours := AddHour(date, -2) - before2Hours := AddHour(now, -2) - diff2 := before2Hours.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Hours.Format("2006-01-02 15:04:05")) + fmt.Println(before2Hours.Format("2006-01-02 15:04:05")) // Output: - // 2h0m0s - // -2h0m0s + // 2021-01-01 02:00:00 + // 2020-12-31 22:00:00 } func ExampleAddMinute() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - after2Minutes := AddMinute(now, 2) - diff1 := after2Minutes.Sub(now) + after2Minutes := AddMinute(date, 2) + before2Minutes := AddMinute(date, -2) - before2Minutes := AddMinute(now, -2) - diff2 := before2Minutes.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Minutes.Format("2006-01-02 15:04:05")) + fmt.Println(before2Minutes.Format("2006-01-02 15:04:05")) // Output: - // 2m0s - // -2m0s + // 2021-01-01 00:02:00 + // 2020-12-31 23:58:00 } func ExampleAddYear() { - now := time.Now() + date, _ := time.Parse("2006-01-02", "2021-01-01") - after1Year := AddYear(now, 1) - diff1 := after1Year.Sub(now) + after2Years := AddYear(date, 2) + before2Years := AddYear(date, -2) - before1Year := AddYear(now, -1) - diff2 := before1Year.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Years.Format("2006-01-02")) + fmt.Println(before2Years.Format("2006-01-02")) // Output: - // 8760h0m0s - // -8760h0m0s + // 2023-01-01 + // 2019-01-01 } func ExampleGetNowDate() { diff --git a/datetime/datetime_test.go b/datetime/datetime_test.go index acb7020..a9e19b1 100644 --- a/datetime/datetime_test.go +++ b/datetime/datetime_test.go @@ -9,78 +9,304 @@ import ( func TestAddYear(t *testing.T) { t.Parallel() - assert := internal.NewAssert(t, "TestAddDay") - now := time.Now() - after2Years := AddYear(now, 1) - diff1 := after2Years.Sub(now) - assert.Equal(float64(8760), diff1.Hours()) + tests := []struct { + inputDate string + years int + expected string + }{ + { + inputDate: "2021-01-01 00:00:00", + years: 1, + expected: "2022-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + years: -1, + expected: "2020-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + years: 0, + expected: "2021-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + years: 2, + expected: "2023-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + years: 3, + expected: "2024-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + years: 4, + expected: "2025-01-01 00:00:00", + }, + } - before2Years := AddYear(now, -1) - diff2 := before2Years.Sub(now) - assert.Equal(float64(-8760), diff2.Hours()) -} - -func TestBetweenSeconds(t *testing.T) { - t.Parallel() - - assert := internal.NewAssert(t, "TestBetweenSeconds") - - today := time.Now() - tomorrow := AddDay(today, 1) - yesterday := AddDay(today, -1) - - result1 := BetweenSeconds(today, tomorrow) - result2 := BetweenSeconds(today, yesterday) - - assert.Equal(int64(86400), result1) - assert.Equal(int64(-86400), result2) + for _, tt := range tests { + date, _ := time.Parse("2006-01-02 15:04:05", tt.inputDate) + result := AddYear(date, int64(tt.years)) + assert.Equal(tt.expected, result.Format("2006-01-02 15:04:05")) + } } func TestAddDay(t *testing.T) { t.Parallel() - assert := internal.NewAssert(t, "TestAddDay") - now := time.Now() - after2Days := AddDay(now, 2) - diff1 := after2Days.Sub(now) - assert.Equal(float64(48), diff1.Hours()) + tests := []struct { + inputDate string + days int + expected string + }{ + { + inputDate: "2021-01-01 00:00:00", + days: 1, + expected: "2021-01-02 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + days: -1, + expected: "2020-12-31 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + days: 0, + expected: "2021-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + days: 2, + expected: "2021-01-03 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + days: 3, + expected: "2021-01-04 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + days: 4, + expected: "2021-01-05 00:00:00", + }, + } - before2Days := AddDay(now, -2) - diff2 := before2Days.Sub(now) - assert.Equal(float64(-48), diff2.Hours()) + for _, tt := range tests { + date, _ := time.Parse("2006-01-02 15:04:05", tt.inputDate) + result := AddDay(date, int64(tt.days)) + assert.Equal(tt.expected, result.Format("2006-01-02 15:04:05")) + } } func TestAddHour(t *testing.T) { t.Parallel() - assert := internal.NewAssert(t, "TestAddHour") - now := time.Now() - after2Hours := AddHour(now, 2) - diff1 := after2Hours.Sub(now) - assert.Equal(float64(2), diff1.Hours()) + tests := []struct { + inputDate string + hours int + expected string + }{ + { + inputDate: "2021-01-01 00:00:00", + hours: 1, + expected: "2021-01-01 01:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + hours: -1, + expected: "2020-12-31 23:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + hours: 0, + expected: "2021-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + hours: 24, + expected: "2021-01-02 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + hours: 25, + expected: "2021-01-02 01:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + hours: 48, + expected: "2021-01-03 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + hours: 49, + expected: "2021-01-03 01:00:00", + }, + } + + for _, tt := range tests { + date, _ := time.Parse("2006-01-02 15:04:05", tt.inputDate) + result := AddHour(date, int64(tt.hours)) + assert.Equal(tt.expected, result.Format("2006-01-02 15:04:05")) + } - before2Hours := AddHour(now, -2) - diff2 := before2Hours.Sub(now) - assert.Equal(float64(-2), diff2.Hours()) } func TestAddMinute(t *testing.T) { t.Parallel() - assert := internal.NewAssert(t, "TestAddMinute") - now := time.Now() - after2Minutes := AddMinute(now, 2) - diff1 := after2Minutes.Sub(now) - assert.Equal(float64(2), diff1.Minutes()) + tests := []struct { + inputDate string + minutes int + expected string + }{ + { + inputDate: "2021-01-01 00:00:00", + minutes: 1, + expected: "2021-01-01 00:01:00", + }, + { + inputDate: "2021-01-01 00:00:00", + minutes: -1, + expected: "2020-12-31 23:59:00", + }, + { + inputDate: "2021-01-01 00:00:00", + minutes: 0, + expected: "2021-01-01 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + minutes: 60, + expected: "2021-01-01 01:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + minutes: 61, + expected: "2021-01-01 01:01:00", + }, + { + inputDate: "2021-01-01 00:00:00", + minutes: 1440, + expected: "2021-01-02 00:00:00", + }, + { + inputDate: "2021-01-01 00:00:00", + minutes: 1441, + expected: "2021-01-02 00:01:00", + }, + } + + for _, tt := range tests { + date, _ := time.Parse("2006-01-02 15:04:05", tt.inputDate) + result := AddMinute(date, int64(tt.minutes)) + assert.Equal(tt.expected, result.Format("2006-01-02 15:04:05")) + } +} + +func TestAddWeek(t *testing.T) { + t.Parallel() + + assert := internal.NewAssert(t, "TestAddWeek") + + tests := []struct { + inputDate string + weeks int + expected string + }{ + { + inputDate: "2021-01-01", + weeks: 1, + expected: "2021-01-08", + }, + { + inputDate: "2021-01-01", + weeks: -1, + expected: "2020-12-25", + }, + { + inputDate: "2021-01-01", + weeks: 0, + expected: "2021-01-01", + }, + { + inputDate: "2021-01-01", + weeks: 52, + expected: "2021-12-31", + }, + { + inputDate: "2021-01-01", + weeks: 53, + expected: "2022-01-07", + }, + { + inputDate: "2021-01-01", + weeks: 104, + expected: "2022-12-30", + }, + } + + for _, tt := range tests { + date, _ := time.Parse("2006-01-02", tt.inputDate) + result := AddWeek(date, int64(tt.weeks)) + assert.Equal(tt.expected, result.Format("2006-01-02")) + } +} + +func TestAddMonth(t *testing.T) { + t.Parallel() + + assert := internal.NewAssert(t, "TestAddMonth") + + tests := []struct { + inputDate string + months int + expected string + }{ + { + inputDate: "2021-01-01", + months: 1, + expected: "2021-02-01", + }, + { + inputDate: "2021-01-01", + months: -1, + expected: "2020-12-01", + }, + { + inputDate: "2021-01-01", + months: 0, + expected: "2021-01-01", + }, + { + inputDate: "2021-01-01", + months: 12, + expected: "2022-01-01", + }, + { + inputDate: "2021-01-01", + months: 13, + expected: "2022-02-01", + }, + { + inputDate: "2021-01-01", + months: 24, + expected: "2023-01-01", + }, + } + + for _, tt := range tests { + date, _ := time.Parse("2006-01-02", tt.inputDate) + result := AddMonth(date, int64(tt.months)) + assert.Equal(tt.expected, result.Format("2006-01-02")) + } - before2Minutes := AddMinute(now, -2) - diff2 := before2Minutes.Sub(now) - assert.Equal(float64(-2), diff2.Minutes()) } func TestGetNowDate(t *testing.T) { @@ -578,3 +804,19 @@ func TestMaxMin(t *testing.T) { assert.Equal(oneMinuteAgo, min) assert.Equal(oneMinuteAfter, max) } + +func TestBetweenSeconds(t *testing.T) { + t.Parallel() + + assert := internal.NewAssert(t, "TestBetweenSeconds") + + today := time.Now() + tomorrow := AddDay(today, 1) + yesterday := AddDay(today, -1) + + result1 := BetweenSeconds(today, tomorrow) + result2 := BetweenSeconds(today, yesterday) + + assert.Equal(int64(86400), result1) + assert.Equal(int64(-86400), result2) +} diff --git a/docs/api/packages/datetime.md b/docs/api/packages/datetime.md index ad22fdf..b666521 100644 --- a/docs/api/packages/datetime.md +++ b/docs/api/packages/datetime.md @@ -23,6 +23,8 @@ import ( ## 目录 - [AddDay](#AddDay) +- [AddWeek](#AddWeek) +- [AddMonth](#AddMonth) - [AddHour](#AddHour) - [AddMinute](#AddMinute) - [AddYear](#AddYear) @@ -109,7 +111,7 @@ import ( 函数签名: ```go -func AddDay(t time.Time, day int64) time.Time +func AddDay(t time.Time, days int64) time.Time ``` 示例:[运行](https://go.dev/play/p/dIGbs_uTdFa) @@ -124,20 +126,89 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - tomorrow := datetime.AddDay(now, 1) - diff1 := tomorrow.Sub(now) + after1Day := datetime.AddDay(date, 1) + before1Day := datetime.AddDay(date, -1) - yesterday := datetime.AddDay(now, -1) - diff2 := yesterday.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after1Day.Format("2006-01-02 15:04:05")) + fmt.Println(before1Day.Format("2006-01-02 15:04:05")) // Output: - // 24h0m0s - // -24h0m0s + // 2021-01-02 00:00:00 + // 2020-12-31 00:00:00 +} +``` + +### AddWeek + +

将日期加/减星期数。

+ +函数签名: + +```go +func AddWeek(t time.Time, weeks int64) time.Time +``` + +示例:[运行](todo) + +```go +package main + +import ( + "fmt" + "time" + "github.com/duke-git/lancet/v2/datetime" +) + +func main() { + date, _ := time.Parse("2006-01-02", "2021-01-01") + + after2Weeks := datetime.AddWeek(date, 2) + before2Weeks := datetime.AddWeek(date, -2) + + fmt.Println(after2Weeks.Format("2006-01-02")) + fmt.Println(before2Weeks.Format("2006-01-02")) + + // Output: + // 2021-01-15 + // 2020-12-18 +} +``` + +### AddMonth + +

将日期加/减月数。

+ +函数签名: + +```go +func AddMonth(t time.Time, months int64) time.Time +``` + +示例:[运行](todo) + +```go +package main + +import ( + "fmt" + "time" + "github.com/duke-git/lancet/v2/datetime" +) + +func main() { + date, _ := time.Parse("2006-01-02", "2021-01-01") + + after2Months := datetime.AddMonth(date, 2) + before2Months := datetime.AddMonth(date, -2) + + fmt.Println(after2Months.Format("2006-01-02")) + fmt.Println(before2Months.Format("2006-01-02")) + + // Output: + // 2021-03-01 + // 2020-11-01 } ``` @@ -148,7 +219,7 @@ func main() { 函数签名: ```go -func AddHour(t time.Time, hour int64) time.Time +func AddHour(t time.Time, hours int64) time.Time ``` 示例:[运行](https://go.dev/play/p/rcMjd7OCsi5) @@ -163,20 +234,17 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - after2Hours := datetime.AddHour(now, 2) - diff1 := after2Hours.Sub(now) + after2Hours := datetime.AddHour(date, 2) + before2Hours := datetime.AddHour(date, -2) - before2Hours := datetime.AddHour(now, -2) - diff2 := before2Hours.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Hours.Format("2006-01-02 15:04:05")) + fmt.Println(before2Hours.Format("2006-01-02 15:04:05")) // Output: - // 2h0m0s - // -2h0m0s + // 2021-01-01 02:00:00 + // 2020-12-31 22:00:00 } ``` @@ -187,7 +255,7 @@ func main() { 函数签名: ```go -func AddMinute(t time.Time, minute int64) time.Time +func AddMinute(t time.Time, minutes int64) time.Time ``` 示例:[运行](https://go.dev/play/p/nT1heB1KUUK) @@ -202,20 +270,17 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - after2Minutes := datetime.AddMinute(now, 2) - diff1 := after2Minutes.Sub(now) + after2Minutes := datetime.AddMinute(date, 2) + before2Minutes := datetime.AddMinute(date, -2) - before2Minutes := datetime.AddMinute(now, -2) - diff2 := before2Minutes.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Minutes.Format("2006-01-02 15:04:05")) + fmt.Println(before2Minutes.Format("2006-01-02 15:04:05")) // Output: - // 2m0s - // -2m0s + // 2021-01-01 00:02:00 + // 2020-12-31 23:58:00 } ``` @@ -226,7 +291,7 @@ func main() { 函数签名: ```go -func AddYear(t time.Time, year int64) time.Time +func AddYear(t time.Time, years int64) time.Time ``` 示例:[运行](https://go.dev/play/p/MqW2ujnBx10) @@ -241,20 +306,17 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02", "2021-01-01") - after1Year := datetime.AddYear(now, 1) - diff1 := after1Year.Sub(now) + after2Years := AddYear(date, 2) + before2Years := AddYear(date, -2) - before1Year := datetime.AddYear(now, -1) - diff2 := before1Year.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Years.Format("2006-01-02")) + fmt.Println(before2Years.Format("2006-01-02")) // Output: - // 8760h0m0s - // -8760h0m0s + // 2023-01-01 + // 2019-01-01 } ``` diff --git a/docs/en/api/packages/datetime.md b/docs/en/api/packages/datetime.md index a5fbca4..a5c734f 100644 --- a/docs/en/api/packages/datetime.md +++ b/docs/en/api/packages/datetime.md @@ -24,6 +24,8 @@ import ( ## Index - [AddDay](#AddDay) +- [AddWeek](#AddWeek) +- [AddMonth](#AddMonth) - [AddHour](#AddHour) - [AddMinute](#AddMinute) - [AddYear](#AddYear) @@ -111,7 +113,7 @@ import ( Signature: ```go -func AddDay(t time.Time, day int64) time.Time +func AddDay(t time.Time, days int64) time.Time ``` Example:[Run](https://go.dev/play/p/dIGbs_uTdFa) @@ -126,20 +128,89 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - tomorrow := datetime.AddDay(now, 1) - diff1 := tomorrow.Sub(now) + after1Day := datetime.AddDay(date, 1) + before1Day := datetime.AddDay(date, -1) - yesterday := datetime.AddDay(now, -1) - diff2 := yesterday.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after1Day.Format("2006-01-02 15:04:05")) + fmt.Println(before1Day.Format("2006-01-02 15:04:05")) // Output: - // 24h0m0s - // -24h0m0s + // 2021-01-02 00:00:00 + // 2020-12-31 00:00:00 +} +``` + +### AddWeek + +

Add or sub weeks to time.

+ +Signature: + +```go +func AddWeek(t time.Time, weeks int64) time.Time +``` + +Example:[Run](todo) + +```go +package main + +import ( + "fmt" + "time" + "github.com/duke-git/lancet/v2/datetime" +) + +func main() { + date, _ := time.Parse("2006-01-02", "2021-01-01") + + after2Weeks := datetime.AddWeek(date, 2) + before2Weeks := datetime.AddWeek(date, -2) + + fmt.Println(after2Weeks.Format("2006-01-02")) + fmt.Println(before2Weeks.Format("2006-01-02")) + + // Output: + // 2021-01-15 + // 2020-12-18 +} +``` + +### AddMonth + +

Add or sub months to time.

+ +Signature: + +```go +func AddMonth(t time.Time, months int64) time.Time +``` + +Example:[Run](todo) + +```go +package main + +import ( + "fmt" + "time" + "github.com/duke-git/lancet/v2/datetime" +) + +func main() { + date, _ := time.Parse("2006-01-02", "2021-01-01") + + after2Months := datetime.AddMonth(date, 2) + before2Months := datetime.AddMonth(date, -2) + + fmt.Println(after2Months.Format("2006-01-02")) + fmt.Println(before2Months.Format("2006-01-02")) + + // Output: + // 2021-03-01 + // 2020-11-01 } ``` @@ -165,20 +236,17 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - after2Hours := datetime.AddHour(now, 2) - diff1 := after2Hours.Sub(now) + after2Hours := datetime.AddHour(date, 2) + before2Hours := datetime.AddHour(date, -2) - before2Hours := datetime.AddHour(now, -2) - diff2 := before2Hours.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Hours.Format("2006-01-02 15:04:05")) + fmt.Println(before2Hours.Format("2006-01-02 15:04:05")) // Output: - // 2h0m0s - // -2h0m0s + // 2021-01-01 02:00:00 + // 2020-12-31 22:00:00 } ``` @@ -204,20 +272,17 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00") - after2Minutes := datetime.AddMinute(now, 2) - diff1 := after2Minutes.Sub(now) + after2Minutes := datetime.AddMinute(date, 2) + before2Minutes := datetime.AddMinute(date, -2) - before2Minutes := datetime.AddMinute(now, -2) - diff2 := before2Minutes.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Minutes.Format("2006-01-02 15:04:05")) + fmt.Println(before2Minutes.Format("2006-01-02 15:04:05")) // Output: - // 2m0s - // -2m0s + // 2021-01-01 00:02:00 + // 2020-12-31 23:58:00 } ``` @@ -243,20 +308,17 @@ import ( ) func main() { - now := time.Now() + date, _ := time.Parse("2006-01-02", "2021-01-01") - after1Year := datetime.AddYear(now, 1) - diff1 := after1Year.Sub(now) + after2Years := AddYear(date, 2) + before2Years := AddYear(date, -2) - before1Year := datetime.AddYear(now, -1) - diff2 := before1Year.Sub(now) - - fmt.Println(diff1) - fmt.Println(diff2) + fmt.Println(after2Years.Format("2006-01-02")) + fmt.Println(before2Years.Format("2006-01-02")) // Output: - // 8760h0m0s - // -8760h0m0s + // 2023-01-01 + // 2019-01-01 } ``` @@ -1342,7 +1404,7 @@ import ( func main() { result1 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss") - result2 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss", "EST") + result2 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss", "EST") fmt.Println(result1) fmt.Println(result2)