diff --git a/datetime/datetime.go b/datetime/datetime.go index 3b55fce..2c00dbd 100644 --- a/datetime/datetime.go +++ b/datetime/datetime.go @@ -190,3 +190,18 @@ func EndOfYear(t time.Time) time.Time { func IsLeapYear(year int) bool { return year%4 == 0 && (year%100 != 0 || year%400 == 0) } + +// BetweenSeconds returns the number of seconds between two times. +func BetweenSeconds(t1 time.Time, t2 time.Time) int64 { + index := t2.Unix() - t1.Unix() + return index +} + +// DayOfYear returns which day of the year the parameter date `t` is. +func DayOfYear(t time.Time) int { + y, m, d := t.Date() + firstDay := time.Date(y, 1, 1, 0, 0, 0, 0, t.Location()) + nowDate := time.Date(y, m, d, 0, 0, 0, 0, t.Location()) + + return int(nowDate.Sub(firstDay).Hours() / 24) +} diff --git a/datetime/datetime_test.go b/datetime/datetime_test.go index 9b21a6f..85d5f18 100644 --- a/datetime/datetime_test.go +++ b/datetime/datetime_test.go @@ -254,3 +254,32 @@ func TestIsLeapYear(t *testing.T) { assert.Equal(true, result1) assert.Equal(false, result2) } + +func TestBetweenSeconds(t *testing.T) { + 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 TestDayOfYear(t *testing.T) { + assert := internal.NewAssert(t, "TestDayOfYear") + date1 := time.Date(2023, 02, 01, 1, 1, 1, 0, time.Local) + result1 := DayOfYear(date1) + assert.Equal(31, result1) + + date2 := time.Date(2023, 01, 02, 1, 1, 1, 0, time.Local) + result2 := DayOfYear(date2) + assert.Equal(1, result2) + + date3 := time.Date(2023, 01, 01, 1, 1, 1, 0, time.Local) + result3 := DayOfYear(date3) + assert.Equal(0, result3) +} diff --git a/docs/datetime.md b/docs/datetime.md index 779c332..a54b85f 100644 --- a/docs/datetime.md +++ b/docs/datetime.md @@ -54,6 +54,8 @@ import ( - [ToFormatForTpl](#ToFormatForTpl) - [ToIso8601](#ToIso8601) - [IsLeapYear](#IsLeapYear) +- [BetweenSeconds](#BetweenSeconds) +- [DayOfYear](#DayOfYear)
@@ -995,3 +997,82 @@ func main() { // false } ``` + +### BetweenSeconds + +

Return the number of seconds between two times.

+ +Signature: + +```go +func BetweenSeconds(t1 time.Time, t2 time.Time) int64 +``` + +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/datetime" +) + +func main() { + today := time.Now() + tomorrow := AddDay(today, 1) + yesterday := AddDay(today, -1) + + result1 := datetime.BetweenSeconds(today, tomorrow) + result2 := datetime.BetweenSeconds(today, yesterday) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // 86400 + // -86400 +} +``` + + +### DayOfYear + +

Returns which day of the year the parameter date `t` is.

+ +Signature: + +```go +func DayOfYear(t time.Time) int +``` + +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/datetime" +) + +func main() { + date1 := time.Date(2023, 02, 01, 1, 1, 1, 0, time.Local) + result1 := datetime.DayOfYear(date1) + + date2 := time.Date(2023, 01, 02, 1, 1, 1, 0, time.Local) + result2 := datetime.DayOfYear(date2) + + date3 := time.Date(2023, 01, 01, 1, 1, 1, 0, time.Local) + result3 := datetime.DayOfYear(date3) + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + + // Output: + // 31 + // 1 + // 0 +} +``` diff --git a/docs/datetime_zh-CN.md b/docs/datetime_zh-CN.md index 511efa9..53f786e 100644 --- a/docs/datetime_zh-CN.md +++ b/docs/datetime_zh-CN.md @@ -54,6 +54,8 @@ import ( - [ToFormatForTpl](#ToFormatForTpl) - [ToIso8601](#ToIso8601) - [IsLeapYear](#IsLeapYear) +- [BetweenSeconds](#BetweenSeconds) +- [DayOfYear](#DayOfYear)
@@ -995,3 +997,81 @@ func main() { // false } ``` + +### BetweenSeconds + +

返回两个时间的间隔秒数。

+ +函数签名: + +```go +func BetweenSeconds(t1 time.Time, t2 time.Time) int64 +``` + +示例: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/datetime" +) + +func main() { + today := time.Now() + tomorrow := AddDay(today, 1) + yesterday := AddDay(today, -1) + + result1 := datetime.BetweenSeconds(today, tomorrow) + result2 := datetime.BetweenSeconds(today, yesterday) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // 86400 + // -86400 +} +``` + +### DayOfYear + +

返回参数日期是一年中的第几天。

+ +函数签名: + +```go +func DayOfYear(t time.Time) int +``` + +示例: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/datetime" +) + +func main() { + date1 := time.Date(2023, 02, 01, 1, 1, 1, 0, time.Local) + result1 := datetime.DayOfYear(date1) + + date2 := time.Date(2023, 01, 02, 1, 1, 1, 0, time.Local) + result2 := datetime.DayOfYear(date2) + + date3 := time.Date(2023, 01, 01, 1, 1, 1, 0, time.Local) + result3 := datetime.DayOfYear(date3) + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + + // Output: + // 31 + // 1 + // 0 +} +```