diff --git a/datetime/datetime.go b/datetime/datetime.go index 70f163e..3b55fce 100644 --- a/datetime/datetime.go +++ b/datetime/datetime.go @@ -69,6 +69,11 @@ func AddDay(t time.Time, day int64) time.Time { return t.Add(24 * time.Hour * time.Duration(day)) } +// AddYear add or sub year to the time. +func AddYear(t time.Time, year int64) time.Time { + return t.Add(365 * 24 * time.Hour * time.Duration(year)) +} + // GetNowDate return format yyyy-mm-dd of current date func GetNowDate() string { return time.Now().Format("2006-01-02") @@ -180,3 +185,8 @@ func BeginOfYear(t time.Time) time.Time { func EndOfYear(t time.Time) time.Time { return BeginOfYear(t).AddDate(1, 0, 0).Add(-time.Nanosecond) } + +// IsLeapYear check if param year is leap year or not. +func IsLeapYear(year int) bool { + return year%4 == 0 && (year%100 != 0 || year%400 == 0) +} diff --git a/datetime/datetime_test.go b/datetime/datetime_test.go index 728fe97..9b21a6f 100644 --- a/datetime/datetime_test.go +++ b/datetime/datetime_test.go @@ -46,6 +46,19 @@ func TestAddMinute(t *testing.T) { assert.Equal(float64(-2), diff2.Minutes()) } +func TestAddYear(t *testing.T) { + assert := internal.NewAssert(t, "TestAddDay") + + now := time.Now() + after2Years := AddYear(now, 1) + diff1 := after2Years.Sub(now) + assert.Equal(float64(8760), diff1.Hours()) + + before2Years := AddYear(now, -1) + diff2 := before2Years.Sub(now) + assert.Equal(float64(-8760), diff2.Hours()) +} + func TestGetNowDate(t *testing.T) { assert := internal.NewAssert(t, "TestGetNowDate") expected := time.Now().Format("2006-01-02") @@ -231,3 +244,13 @@ func TestEndOfYear(t *testing.T) { assert.Equal(expected, actual) } + +func TestIsLeapYear(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfYear") + + result1 := IsLeapYear(2000) + result2 := IsLeapYear(2001) + + assert.Equal(true, result1) + assert.Equal(false, result2) +} diff --git a/docs/datetime.md b/docs/datetime.md index d1f68c9..779c332 100644 --- a/docs/datetime.md +++ b/docs/datetime.md @@ -25,6 +25,7 @@ import ( - [AddDay](#AddDay) - [AddHour](#AddHour) - [AddMinute](#AddMinute) +- [AddYear](#AddYear) - [BeginOfMinute](#BeginOfMinute) - [BeginOfHour](#BeginOfHour) - [BeginOfDay](#BeginOfDay) @@ -52,6 +53,7 @@ import ( - [ToFormat](#ToFormat) - [ToFormatForTpl](#ToFormatForTpl) - [ToIso8601](#ToIso8601) +- [IsLeapYear](#IsLeapYear)
@@ -170,6 +172,45 @@ func main() { } ``` +### AddYear + +

Add or sub year to the time.

+ +Signature: + +```go +func AddYear(t time.Time, year int64) time.Time +``` + +Example: + +```go +package main + +import ( + "fmt" + "time" + "github.com/duke-git/lancet/datetime" +) + +func main() { + now := time.Now() + + after1Year := datetime.AddYear(now, 1) + diff1 := after1Year.Sub(now) + + before1Year := datetime.AddYear(now, -1) + diff2 := before1Year.Sub(now) + + fmt.Println(diff1) + fmt.Println(diff2) + + // Output: + // 8760h0m0s + // -8760h0m0s +} +``` + ### BeginOfMinute

Return beginning minute time of day.

@@ -921,3 +962,36 @@ func main() { fmt.Println(ts) //"2006-01-02T23:04:05+08:00" } ``` + +### IsLeapYear + +

check if param `year` is leap year or not.

+ +Signature: + +```go +func IsLeapYear(year int) bool +``` + +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/datetime" +) + +func main() { + result1 := datetime.IsLeapYear(2000) + result2 := datetime.IsLeapYear(2001) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // true + // false +} +``` diff --git a/docs/datetime_zh-CN.md b/docs/datetime_zh-CN.md index c74364a..511efa9 100644 --- a/docs/datetime_zh-CN.md +++ b/docs/datetime_zh-CN.md @@ -25,6 +25,7 @@ import ( - [AddDay](#AddDay) - [AddHour](#AddHour) - [AddMinute](#AddMinute) +- [AddYear](#AddYear) - [BeginOfMinute](#BeginOfMinute) - [BeginOfHour](#BeginOfHour) - [BeginOfDay](#BeginOfDay) @@ -52,6 +53,7 @@ import ( - [ToFormat](#ToFormat) - [ToFormatForTpl](#ToFormatForTpl) - [ToIso8601](#ToIso8601) +- [IsLeapYear](#IsLeapYear)
@@ -170,6 +172,45 @@ func main() { } ``` +### AddYear + +

将日期加/减年数。

+ +函数签名: + +```go +func AddYear(t time.Time, year int64) time.Time +``` + +示例: + +```go +package main + +import ( + "fmt" + "time" + "github.com/duke-git/lancet/datetime" +) + +func main() { + now := time.Now() + + after1Year := datetime.AddYear(now, 1) + diff1 := after1Year.Sub(now) + + before1Year := datetime.AddYear(now, -1) + diff2 := before1Year.Sub(now) + + fmt.Println(diff1) + fmt.Println(diff2) + + // Output: + // 8760h0m0s + // -8760h0m0s +} +``` + ### BeginOfMinute

返回指定时间的分钟开始时间

@@ -921,3 +962,36 @@ func main() { fmt.Println(ts) //"2006-01-02T23:04:05+08:00" } ``` + +### IsLeapYear + +

验证是否是闰年。

+ +函数签名: + +```go +func IsLeapYear(year int) bool +``` + +示例: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/datetime" +) + +func main() { + result1 := datetime.IsLeapYear(2000) + result2 := datetime.IsLeapYear(2001) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // true + // false +} +```