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

feat: add AddWeek, AddMonth and update example of some add time functions

This commit is contained in:
dudaodong
2025-02-18 14:10:04 +08:00
parent a9c75b081d
commit a09f5623d6
7 changed files with 639 additions and 245 deletions

View File

@@ -1,51 +1,51 @@
-----BEGIN rsa private key----- -----BEGIN rsa private key-----
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
-----END rsa private key----- -----END rsa private key-----

View File

@@ -1,14 +1,14 @@
-----BEGIN rsa public key----- -----BEGIN rsa public key-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAof7+5KVH6s/ID7onVeuC MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5bsUtFZmae/9D6ncFO62
PVGPIW6TiHHjDlxbYLdA/CyhTvR2Pk8JvX9BjBXLI/+jTWsyTUucwszu3MaVhIS/ EaaGxoc0+/ZXqi2OtHZYpaDV0/bLV0gegTIQ5+kUJr0VQ/9GMEnALdGNBT9bJ0Mv
gzoLKjr5meVp+HEcFe98s4XRYhob2cdpDo+Jty8Vuodz5T2nYkIZP/oyJNmQCBYD 7VWZijYoyUOQ4fB4k8vaytFcug/kMYkvE+pvXg6JMbp9rZXXiz5djabAKv9ZrClU
e20nBwmjjFfworEvwNy2fSucs8wrlJT2Xqy4oHZqERWvnIJZtBshX9//9Pw3m/Gu ugnK8KPtn+6SnCC4oKVhMRj2G+5LAxYhiidSrnK8xkgts4OwLTzqWw9N2QMvdkXj
pHeBFBNW2omWCQm4aTEbeepkXloTgVQ75FEpyyjNjDi+OG/Om2v5l+XCvOcV39Hc wwaIG5UeDqeal0/hna402j6/QbANq/brR2eXHfxVrX9eMKBdA6OmVPeFUVb+JR/p
7sBovDFNX6w39zQSIKiMpFkxciKP9SPbqZz+Vv0iyUPKxi2gXwbgy0+k2aTQlsPS 2TvNEEXRM/DmPP70HXg08L1XIjvaZm7MNbcqS+6AUciwWNshm8o4vFkyjN1E3U5s
976+2/4QgLReU3Ujeh8Q6oRwB8HRfPlD7aY+dGPMT16o1R3nhs2jwsGId812lw5q yYptCEtDYA/+GPFzbzCzSyaTxBpdxSI6wB9Vt+Hk/DzS3RBoxj4xYk2LmPDX6i86
gjaYZJCXCBhQcZFs+1IM7c6GmIGXYIAcFDWiVsENqqesQO5tCA1UTTGtIa9kMYD/ skBTQ9X3sUdWUoelyAko8JW+sXlXMQP05yNyBY+fayzhHfYYsi+4jpV4uLMY7bXe
pwFK1ANVvrr2c6Qu/0UuBneawok76vDHTQCWmVcF0QIe5RaTj8YK9TaNAcQDPy9j ySffROdiEQ9xXCf3trq2isKReHhYhmu7mnjIn+CcJZ909XzMJmN6zEeSTeXZMDqP
M0jWxJE1EBuRpDtIymQIcgMpXwguerh9NuXNoGEVPn4mvlVfy+1TVGzws8WsZwY/ K1dv3Yom6n/oRpR+rfx8JYCKTFR/+QYPGR1kc+LUyqgFcWwTexf3CfL3ck0H0iG7
LH07afdfIeDc1YwLadwq5S+wxuzwNuSCM9t2rIzfbRhorlg/lVDWqP8H6d9vF5MJ ivGV6wm9xvpOxbQb+4/79jQLtoBC8goU9KXuxYEs2aE4/LM8zY4QpHDIZYLoHnz2
Y9kSiO3KgCSJLYfVl+Q+8asCAwEAAQ== xSgm+rlh6E4p0t5mik3wOAUCAwEAAQ==
-----END rsa public key----- -----END rsa public key-----

View File

@@ -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 // Play: https://go.dev/play/p/nT1heB1KUUK
func AddMinute(t time.Time, minute int64) time.Time { func AddMinute(t time.Time, minutes int64) time.Time {
return t.Add(time.Minute * time.Duration(minute)) 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 // Play: https://go.dev/play/p/rcMjd7OCsi5
func AddHour(t time.Time, hour int64) time.Time { func AddHour(t time.Time, hours int64) time.Time {
return t.Add(time.Hour * time.Duration(hour)) 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 // Play: https://go.dev/play/p/dIGbs_uTdFa
func AddDay(t time.Time, day int64) time.Time { func AddDay(t time.Time, days int64) time.Time {
return t.Add(24 * time.Hour * time.Duration(day)) 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. // AddYear add or sub year to the time.
// Play: https://go.dev/play/p/MqW2ujnBx10 // Play: https://go.dev/play/p/MqW2ujnBx10
func AddYear(t time.Time, year int64) time.Time { 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. // GetNowDate return format yyyy-mm-dd of current date.

View File

@@ -7,71 +7,87 @@ import (
) )
func ExampleAddDay() { func ExampleAddDay() {
now := time.Now() date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00")
tomorrow := AddDay(now, 1) after1Day := AddDay(date, 1)
diff1 := tomorrow.Sub(now) before1Day := AddDay(date, -1)
yesterday := AddDay(now, -1) fmt.Println(after1Day.Format("2006-01-02 15:04:05"))
diff2 := yesterday.Sub(now) fmt.Println(before1Day.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 24h0m0s // 2021-01-02 00:00:00
// -24h0m0s // 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() { func ExampleAddHour() {
now := time.Now() date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00")
after2Hours := AddHour(now, 2) after2Hours := AddHour(date, 2)
diff1 := after2Hours.Sub(now) before2Hours := AddHour(date, -2)
before2Hours := AddHour(now, -2) fmt.Println(after2Hours.Format("2006-01-02 15:04:05"))
diff2 := before2Hours.Sub(now) fmt.Println(before2Hours.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 2h0m0s // 2021-01-01 02:00:00
// -2h0m0s // 2020-12-31 22:00:00
} }
func ExampleAddMinute() { func ExampleAddMinute() {
now := time.Now() date, _ := time.Parse("2006-01-02 15:04:05", "2021-01-01 00:00:00")
after2Minutes := AddMinute(now, 2) after2Minutes := AddMinute(date, 2)
diff1 := after2Minutes.Sub(now) before2Minutes := AddMinute(date, -2)
before2Minutes := AddMinute(now, -2) fmt.Println(after2Minutes.Format("2006-01-02 15:04:05"))
diff2 := before2Minutes.Sub(now) fmt.Println(before2Minutes.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 2m0s // 2021-01-01 00:02:00
// -2m0s // 2020-12-31 23:58:00
} }
func ExampleAddYear() { func ExampleAddYear() {
now := time.Now() date, _ := time.Parse("2006-01-02", "2021-01-01")
after1Year := AddYear(now, 1) after2Years := AddYear(date, 2)
diff1 := after1Year.Sub(now) before2Years := AddYear(date, -2)
before1Year := AddYear(now, -1) fmt.Println(after2Years.Format("2006-01-02"))
diff2 := before1Year.Sub(now) fmt.Println(before2Years.Format("2006-01-02"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 8760h0m0s // 2023-01-01
// -8760h0m0s // 2019-01-01
} }
func ExampleGetNowDate() { func ExampleGetNowDate() {

View File

@@ -9,78 +9,304 @@ import (
func TestAddYear(t *testing.T) { func TestAddYear(t *testing.T) {
t.Parallel() t.Parallel()
assert := internal.NewAssert(t, "TestAddDay") assert := internal.NewAssert(t, "TestAddDay")
now := time.Now() tests := []struct {
after2Years := AddYear(now, 1) inputDate string
diff1 := after2Years.Sub(now) years int
assert.Equal(float64(8760), diff1.Hours()) 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) for _, tt := range tests {
diff2 := before2Years.Sub(now) date, _ := time.Parse("2006-01-02 15:04:05", tt.inputDate)
assert.Equal(float64(-8760), diff2.Hours()) result := AddYear(date, int64(tt.years))
} assert.Equal(tt.expected, result.Format("2006-01-02 15:04:05"))
}
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)
} }
func TestAddDay(t *testing.T) { func TestAddDay(t *testing.T) {
t.Parallel() t.Parallel()
assert := internal.NewAssert(t, "TestAddDay") assert := internal.NewAssert(t, "TestAddDay")
now := time.Now() tests := []struct {
after2Days := AddDay(now, 2) inputDate string
diff1 := after2Days.Sub(now) days int
assert.Equal(float64(48), diff1.Hours()) 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) for _, tt := range tests {
diff2 := before2Days.Sub(now) date, _ := time.Parse("2006-01-02 15:04:05", tt.inputDate)
assert.Equal(float64(-48), diff2.Hours()) result := AddDay(date, int64(tt.days))
assert.Equal(tt.expected, result.Format("2006-01-02 15:04:05"))
}
} }
func TestAddHour(t *testing.T) { func TestAddHour(t *testing.T) {
t.Parallel() t.Parallel()
assert := internal.NewAssert(t, "TestAddHour") assert := internal.NewAssert(t, "TestAddHour")
now := time.Now() tests := []struct {
after2Hours := AddHour(now, 2) inputDate string
diff1 := after2Hours.Sub(now) hours int
assert.Equal(float64(2), diff1.Hours()) 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) { func TestAddMinute(t *testing.T) {
t.Parallel() t.Parallel()
assert := internal.NewAssert(t, "TestAddMinute") assert := internal.NewAssert(t, "TestAddMinute")
now := time.Now() tests := []struct {
after2Minutes := AddMinute(now, 2) inputDate string
diff1 := after2Minutes.Sub(now) minutes int
assert.Equal(float64(2), diff1.Minutes()) 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) { func TestGetNowDate(t *testing.T) {
@@ -578,3 +804,19 @@ func TestMaxMin(t *testing.T) {
assert.Equal(oneMinuteAgo, min) assert.Equal(oneMinuteAgo, min)
assert.Equal(oneMinuteAfter, max) 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)
}

View File

@@ -23,6 +23,8 @@ import (
## 目录 ## 目录
- [AddDay](#AddDay) - [AddDay](#AddDay)
- [AddWeek](#AddWeek)
- [AddMonth](#AddMonth)
- [AddHour](#AddHour) - [AddHour](#AddHour)
- [AddMinute](#AddMinute) - [AddMinute](#AddMinute)
- [AddYear](#AddYear) - [AddYear](#AddYear)
@@ -109,7 +111,7 @@ import (
<b>函数签名:</b> <b>函数签名:</b>
```go ```go
func AddDay(t time.Time, day int64) time.Time func AddDay(t time.Time, days int64) time.Time
``` ```
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/dIGbs_uTdFa)</span></b> <b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/dIGbs_uTdFa)</span></b>
@@ -124,20 +126,89 @@ import (
) )
func main() { 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) after1Day := datetime.AddDay(date, 1)
diff1 := tomorrow.Sub(now) before1Day := datetime.AddDay(date, -1)
yesterday := datetime.AddDay(now, -1) fmt.Println(after1Day.Format("2006-01-02 15:04:05"))
diff2 := yesterday.Sub(now) fmt.Println(before1Day.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 24h0m0s // 2021-01-02 00:00:00
// -24h0m0s // 2020-12-31 00:00:00
}
```
### <span id="AddWeek">AddWeek</span>
<p>将日期加/减星期数。</p>
<b>函数签名:</b>
```go
func AddWeek(t time.Time, weeks int64) time.Time
```
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
```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
}
```
### <span id="AddMonth">AddMonth</span>
<p>将日期加/减月数。</p>
<b>函数签名:</b>
```go
func AddMonth(t time.Time, months int64) time.Time
```
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
```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() {
<b>函数签名:</b> <b>函数签名:</b>
```go ```go
func AddHour(t time.Time, hour int64) time.Time func AddHour(t time.Time, hours int64) time.Time
``` ```
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/rcMjd7OCsi5)</span></b> <b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/rcMjd7OCsi5)</span></b>
@@ -163,20 +234,17 @@ import (
) )
func main() { 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) after2Hours := datetime.AddHour(date, 2)
diff1 := after2Hours.Sub(now) before2Hours := datetime.AddHour(date, -2)
before2Hours := datetime.AddHour(now, -2) fmt.Println(after2Hours.Format("2006-01-02 15:04:05"))
diff2 := before2Hours.Sub(now) fmt.Println(before2Hours.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 2h0m0s // 2021-01-01 02:00:00
// -2h0m0s // 2020-12-31 22:00:00
} }
``` ```
@@ -187,7 +255,7 @@ func main() {
<b>函数签名:</b> <b>函数签名:</b>
```go ```go
func AddMinute(t time.Time, minute int64) time.Time func AddMinute(t time.Time, minutes int64) time.Time
``` ```
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/nT1heB1KUUK)</span></b> <b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/nT1heB1KUUK)</span></b>
@@ -202,20 +270,17 @@ import (
) )
func main() { 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) after2Minutes := datetime.AddMinute(date, 2)
diff1 := after2Minutes.Sub(now) before2Minutes := datetime.AddMinute(date, -2)
before2Minutes := datetime.AddMinute(now, -2) fmt.Println(after2Minutes.Format("2006-01-02 15:04:05"))
diff2 := before2Minutes.Sub(now) fmt.Println(before2Minutes.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 2m0s // 2021-01-01 00:02:00
// -2m0s // 2020-12-31 23:58:00
} }
``` ```
@@ -226,7 +291,7 @@ func main() {
<b>函数签名:</b> <b>函数签名:</b>
```go ```go
func AddYear(t time.Time, year int64) time.Time func AddYear(t time.Time, years int64) time.Time
``` ```
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/MqW2ujnBx10)</span></b> <b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/MqW2ujnBx10)</span></b>
@@ -241,20 +306,17 @@ import (
) )
func main() { func main() {
now := time.Now() date, _ := time.Parse("2006-01-02", "2021-01-01")
after1Year := datetime.AddYear(now, 1) after2Years := AddYear(date, 2)
diff1 := after1Year.Sub(now) before2Years := AddYear(date, -2)
before1Year := datetime.AddYear(now, -1) fmt.Println(after2Years.Format("2006-01-02"))
diff2 := before1Year.Sub(now) fmt.Println(before2Years.Format("2006-01-02"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 8760h0m0s // 2023-01-01
// -8760h0m0s // 2019-01-01
} }
``` ```

View File

@@ -24,6 +24,8 @@ import (
## Index ## Index
- [AddDay](#AddDay) - [AddDay](#AddDay)
- [AddWeek](#AddWeek)
- [AddMonth](#AddMonth)
- [AddHour](#AddHour) - [AddHour](#AddHour)
- [AddMinute](#AddMinute) - [AddMinute](#AddMinute)
- [AddYear](#AddYear) - [AddYear](#AddYear)
@@ -111,7 +113,7 @@ import (
<b>Signature:</b> <b>Signature:</b>
```go ```go
func AddDay(t time.Time, day int64) time.Time func AddDay(t time.Time, days int64) time.Time
``` ```
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/dIGbs_uTdFa)</span></b> <b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/dIGbs_uTdFa)</span></b>
@@ -126,20 +128,89 @@ import (
) )
func main() { 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) after1Day := datetime.AddDay(date, 1)
diff1 := tomorrow.Sub(now) before1Day := datetime.AddDay(date, -1)
yesterday := datetime.AddDay(now, -1) fmt.Println(after1Day.Format("2006-01-02 15:04:05"))
diff2 := yesterday.Sub(now) fmt.Println(before1Day.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 24h0m0s // 2021-01-02 00:00:00
// -24h0m0s // 2020-12-31 00:00:00
}
```
### <span id="AddWeek">AddWeek</span>
<p>Add or sub weeks to time.</p>
<b>Signature:</b>
```go
func AddWeek(t time.Time, weeks int64) time.Time
```
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
```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
}
```
### <span id="AddMonth">AddMonth</span>
<p>Add or sub months to time.</p>
<b>Signature:</b>
```go
func AddMonth(t time.Time, months int64) time.Time
```
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
```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() { 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) after2Hours := datetime.AddHour(date, 2)
diff1 := after2Hours.Sub(now) before2Hours := datetime.AddHour(date, -2)
before2Hours := datetime.AddHour(now, -2) fmt.Println(after2Hours.Format("2006-01-02 15:04:05"))
diff2 := before2Hours.Sub(now) fmt.Println(before2Hours.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 2h0m0s // 2021-01-01 02:00:00
// -2h0m0s // 2020-12-31 22:00:00
} }
``` ```
@@ -204,20 +272,17 @@ import (
) )
func main() { 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) after2Minutes := datetime.AddMinute(date, 2)
diff1 := after2Minutes.Sub(now) before2Minutes := datetime.AddMinute(date, -2)
before2Minutes := datetime.AddMinute(now, -2) fmt.Println(after2Minutes.Format("2006-01-02 15:04:05"))
diff2 := before2Minutes.Sub(now) fmt.Println(before2Minutes.Format("2006-01-02 15:04:05"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 2m0s // 2021-01-01 00:02:00
// -2m0s // 2020-12-31 23:58:00
} }
``` ```
@@ -243,20 +308,17 @@ import (
) )
func main() { func main() {
now := time.Now() date, _ := time.Parse("2006-01-02", "2021-01-01")
after1Year := datetime.AddYear(now, 1) after2Years := AddYear(date, 2)
diff1 := after1Year.Sub(now) before2Years := AddYear(date, -2)
before1Year := datetime.AddYear(now, -1) fmt.Println(after2Years.Format("2006-01-02"))
diff2 := before1Year.Sub(now) fmt.Println(before2Years.Format("2006-01-02"))
fmt.Println(diff1)
fmt.Println(diff2)
// Output: // Output:
// 8760h0m0s // 2023-01-01
// -8760h0m0s // 2019-01-01
} }
``` ```
@@ -1342,7 +1404,7 @@ import (
func main() { func main() {
result1 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss") 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(result1)
fmt.Println(result2) fmt.Println(result2)