Skip to content
本页内容

# Datetime ​

datetime 日期时间处理包，格式化日期，比较日期。

## 源码: ​

- https://github.com/duke-git/lancet/blob/main/datetime/datetime.go

## 用法: ​

go

    import (
        "github.com/duke-git/lancet/v2/datetime"
    )

    import (
        "github.com/duke-git/lancet/v2/datetime"
    )

## 目录 ​

- AddDay
- AddHour
- AddMinute
- AddYear
- BeginOfMinute
- BeginOfHour
- BeginOfDay
- BeginOfWeek
- BeginOfMonth
- BeginOfYear
- EndOfMinute
- EndOfHour
- EndOfDay
- EndOfWeek
- EndOfMonth
- EndOfYear
- GetNowDate
- GetNowTime
- GetNowDateTime
- GetTodayStartTime
- GetTodayEndTime
- GetZeroHourTimestamp
- GetNightTimestamp
- FormatTimeToStr
- FormatStrToTime
- NewUnixNow
- NewUnix
- NewFormat
- NewISO8601
- ToUnix
- ToFormat
- ToFormatForTpl
- ToIso8601
- IsLeapYear
- BetweenSeconds
- DayOfYear
- IsWeekenddeprecated
- NowDateOrTime
- Timestamp
- TimestampMilli
- TimestampMicro
- TimestampNano

## 文档 ​

## 注: ​

1. 函数中`format`参数值需要传以下值之一 (忽略大小写):

- yyyy-mm-dd hh:mm:ss
- yyyy-mm-dd hh:mm
- yyyy-mm-dd hh
- yyyy-mm-dd
- yyyy-mm
- mm-dd
- dd-mm-yy hh:mm:ss
- yyyy/mm/dd hh:mm:ss
- yyyy/mm/dd hh:mm
- yyyy/mm/dd hh
- yyyy/mm/dd
- yyyy/mm
- mm/dd
- dd/mm/yy hh:mm:ss
- yyyymmdd
- mmddyy
- yyyy
- yy
- mm
- hh:mm:ss
- hh:mm
- mm:ss

### AddDay ​

将日期加/减天数。

函数签名:

go

    func AddDay(t time.Time, day int64) time.Time

    func AddDay(t time.Time, day int64) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        now := time.Now()

        tomorrow := datetime.AddDay(now, 1)
        diff1 := tomorrow.Sub(now)

        yesterday := datetime.AddDay(now, -1)
        diff2 := yesterday.Sub(now)

        fmt.Println(diff1)
        fmt.Println(diff2)

        // Output:
        // 24h0m0s
        // -24h0m0s
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        now := time.Now()

        tomorrow := datetime.AddDay(now, 1)
        diff1 := tomorrow.Sub(now)

        yesterday := datetime.AddDay(now, -1)
        diff2 := yesterday.Sub(now)

        fmt.Println(diff1)
        fmt.Println(diff2)

        // Output:
        // 24h0m0s
        // -24h0m0s
    }

### AddHour ​

将日期加/减小时数。

函数签名:

go

    func AddHour(t time.Time, hour int64) time.Time

    func AddHour(t time.Time, hour int64) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        now := time.Now()

        after2Hours := datetime.AddHour(now, 2)
        diff1 := after2Hours.Sub(now)

        before2Hours := datetime.AddHour(now, -2)
        diff2 := before2Hours.Sub(now)

        fmt.Println(diff1)
        fmt.Println(diff2)

        // Output:
        // 2h0m0s
        // -2h0m0s
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        now := time.Now()

        after2Hours := datetime.AddHour(now, 2)
        diff1 := after2Hours.Sub(now)

        before2Hours := datetime.AddHour(now, -2)
        diff2 := before2Hours.Sub(now)

        fmt.Println(diff1)
        fmt.Println(diff2)

        // Output:
        // 2h0m0s
        // -2h0m0s
    }

### AddMinute ​

将日期加/减分钟数。

函数签名:

go

    func AddMinute(t time.Time, minute int64) time.Time

    func AddMinute(t time.Time, minute int64) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        now := time.Now()

        after2Minutes := datetime.AddMinute(now, 2)
        diff1 := after2Minutes.Sub(now)

        before2Minutes := datetime.AddMinute(now, -2)
        diff2 := before2Minutes.Sub(now)

        fmt.Println(diff1)
        fmt.Println(diff2)

        // Output:
        // 2m0s
        // -2m0s
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        now := time.Now()

        after2Minutes := datetime.AddMinute(now, 2)
        diff1 := after2Minutes.Sub(now)

        before2Minutes := datetime.AddMinute(now, -2)
        diff2 := before2Minutes.Sub(now)

        fmt.Println(diff1)
        fmt.Println(diff2)

        // Output:
        // 2m0s
        // -2m0s
    }

### AddYear ​

将日期加/减年数。

函数签名:

go

    func AddYear(t time.Time, year int64) time.Time

    func AddYear(t time.Time, year int64) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/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
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/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 ​

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

函数签名:

go

    func BeginOfMinute(t time.Time) time.Time

    func BeginOfMinute(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfMinute(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:50:00 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfMinute(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:50:00 +0000 UTC
    }

### BeginOfHour ​

返回指定时间的小时开始时间。

函数签名:

go

    func BeginOfHour(t time.Time) time.Time

    func BeginOfHour(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfHour(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:00:00 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfHour(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:00:00 +0000 UTC
    }

### BeginOfDay ​

返回指定时间的当天开始时间。

函数签名:

go

    func BeginOfDay(t time.Time) time.Time

    func BeginOfDay(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfDay(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 00:00:00 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfDay(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 00:00:00 +0000 UTC
    }

### BeginOfWeek ​

返回指定时间的每周开始时间,默认开始时间星期日。

函数签名:

go

    func BeginOfWeek(t time.Time, beginFrom ...time.Weekday) time.Time

    func BeginOfWeek(t time.Time, beginFrom ...time.Weekday) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfWeek(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 00:00:00 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfWeek(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 00:00:00 +0000 UTC
    }

### BeginOfMonth ​

返回指定时间的当月开始时间。

函数签名:

go

    func BeginOfMonth(t time.Time) time.Time

    func BeginOfMonth(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfMonth(input)

        fmt.Println(result)

        // Output:
        // 2023-01-01 00:00:00 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfMonth(input)

        fmt.Println(result)

        // Output:
        // 2023-01-01 00:00:00 +0000 UTC
    }

### BeginOfYear ​

返回指定时间的当年开始时间

函数签名:

go

    func BeginOfYear(t time.Time) time.Time

    func BeginOfYear(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfYear(input)

        fmt.Println(result)

        // Output:
        // 2023-01-01 00:00:00 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.BeginOfYear(input)

        fmt.Println(result)

        // Output:
        // 2023-01-01 00:00:00 +0000 UTC
    }

### EndOfMinute ​

返回指定时间的分钟结束时间。

函数签名:

go

    func EndOfMinute(t time.Time) time.Time

    func EndOfMinute(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfMinute(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:50:59.999999999 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfMinute(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:50:59.999999999 +0000 UTC
    }

### EndOfHour ​

返回指定时间的小时结束时间。

函数签名:

go

    func EndOfHour(t time.Time) time.Time

    func EndOfHour(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfHour(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:59:59.999999999 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfHour(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 18:59:59.999999999 +0000 UTC
    }

### EndOfDay ​

返回指定时间的当天结束时间。

函数签名:

go

    func EndOfDay(t time.Time) time.Time

    func EndOfDay(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfDay(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 23:59:59.999999999 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfDay(input)

        fmt.Println(result)

        // Output:
        // 2023-01-08 23:59:59.999999999 +0000 UTC
    }

### EndOfWeek ​

返回指定时间的星期结束时间,默认结束时间星期六。

函数签名:

go

    func EndOfWeek(t time.Time, endWith ...time.Weekday) time.Time

    func EndOfWeek(t time.Time, endWith ...time.Weekday) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfWeek(input)

        fmt.Println(result)

        // Output:
        // 2023-01-14 23:59:59.999999999 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfWeek(input)

        fmt.Println(result)

        // Output:
        // 2023-01-14 23:59:59.999999999 +0000 UTC
    }

### EndOfMonth ​

返回指定时间的当月结束时间。

函数签名:

go

    func EndOfMonth(t time.Time) time.Time

    func EndOfMonth(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfMonth(input)

        fmt.Println(result)

        // Output:
        // 2023-01-31 23:59:59.999999999 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfMonth(input)

        fmt.Println(result)

        // Output:
        // 2023-01-31 23:59:59.999999999 +0000 UTC
    }

### EndOfYear ​

返回指定时间的当年结束时间。

函数签名:

go

    func EndOfYear(t time.Time) time.Time

    func EndOfYear(t time.Time) time.Time

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfYear(input)

        fmt.Println(result)

        // Output:
        // 2023-12-31 23:59:59.999999999 +0000 UTC
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        input := time.Date(2023, 1, 8, 18, 50, 10, 100, time.UTC)
        result := datetime.EndOfYear(input)

        fmt.Println(result)

        // Output:
        // 2023-12-31 23:59:59.999999999 +0000 UTC
    }

### GetNowDate ​

获取当天日期，返回格式：yyyy-mm-dd。

函数签名:

go

    func GetNowDate() string

    func GetNowDate() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        currentDate := datetime.GetNowDate()
        fmt.Println(currentDate)

        // Output:
        // 2022-01-28
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        currentDate := datetime.GetNowDate()
        fmt.Println(currentDate)

        // Output:
        // 2022-01-28
    }

### GetNowTime ​

获取当时时间，返回格式：hh:mm:ss

函数签名:

go

    func GetNowTime() string

    func GetNowTime() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        currentTime := datetime.GetNowTime()
        fmt.Println(currentTime)

        // Output:
        // 15:57:33
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        currentTime := datetime.GetNowTime()
        fmt.Println(currentTime)

        // Output:
        // 15:57:33
    }

### GetNowDateTime ​

获取当时日期和时间，返回格式：yyyy-mm-dd hh:mm:ss。

函数签名:

go

    func GetNowDateTime() string

    func GetNowDateTime() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        current := datetime.GetNowDateTime()
        fmt.Println(current)

        // Output:
        // 2022-01-28 15:59:33
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        current := datetime.GetNowDateTime()
        fmt.Println(current)

        // Output:
        // 2022-01-28 15:59:33
    }

### GetTodayStartTime ​

返回当天开始时间， 格式: yyyy-mm-dd 00:00:00。

函数签名:

go

    func GetTodayStartTime() string

    func GetTodayStartTime() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        startTime := datetime.GetTodayStartTime()
        fmt.Println(startTime)

        // Output:
        // 2023-06-29 00:00:00
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        startTime := datetime.GetTodayStartTime()
        fmt.Println(startTime)

        // Output:
        // 2023-06-29 00:00:00
    }

### GetTodayEndTime ​

返回当天结束时间，格式: yyyy-mm-dd 23:59:59。

函数签名:

go

    func GetTodayEndTime() string

    func GetTodayEndTime() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        endTime := datetime.GetTodayEndTime()
        fmt.Println(endTime)

        // Output:
        // 2023-06-29 23:59:59
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        endTime := datetime.GetTodayEndTime()
        fmt.Println(endTime)

        // Output:
        // 2023-06-29 23:59:59
    }

### GetZeroHourTimestamp ​

获取零点时间戳(timestamp of 00:00)

函数签名:

go

    func GetZeroHourTimestamp() int64

    func GetZeroHourTimestamp() int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        zeroTime := datetime.GetZeroHourTimestamp()
        fmt.Println(zeroTime)

        // Output:
        // 1643299200
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        zeroTime := datetime.GetZeroHourTimestamp()
        fmt.Println(zeroTime)

        // Output:
        // 1643299200
    }

### GetNightTimestamp ​

获取午夜时间戳(timestamp of 23:59)。

函数签名:

go

    func GetNightTimestamp() int64

    func GetNightTimestamp() int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        nightTime := datetime.GetNightTimestamp()
        fmt.Println(nightTime)

        // Output:
        // 1643385599
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        nightTime := datetime.GetNightTimestamp()
        fmt.Println(nightTime)

        // Output:
        // 1643385599
    }

### FormatTimeToStr ​

将日期格式化成字符串，`format` 参数格式参考注1。

函数签名:

go

    func FormatTimeToStr(t time.Time, format string, timezone ...string) string

    func FormatTimeToStr(t time.Time, format string, timezone ...string) string

示例:运行

go

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        t, _ := time.Parse("2006-01-02 15:04:05", "2021-01-02 16:04:08")

        result1 := datetime.FormatTimeToStr(t, "yyyy-mm-dd hh:mm:ss")
        result2 := datetime.FormatTimeToStr(t, "yyyy-mm-dd")
        result3 := datetime.FormatTimeToStr(t, "dd-mm-yy hh:mm:ss")

        fmt.Println(result1)
        fmt.Println(result2)
        fmt.Println(result3)

        // Output:
        // 2021-01-02 16:04:08
        // 2021-01-02
        // 02-01-21 16:04:08
    }

    package main

    import (
        "fmt"
        "time"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        t, _ := time.Parse("2006-01-02 15:04:05", "2021-01-02 16:04:08")

        result1 := datetime.FormatTimeToStr(t, "yyyy-mm-dd hh:mm:ss")
        result2 := datetime.FormatTimeToStr(t, "yyyy-mm-dd")
        result3 := datetime.FormatTimeToStr(t, "dd-mm-yy hh:mm:ss")

        fmt.Println(result1)
        fmt.Println(result2)
        fmt.Println(result3)

        // Output:
        // 2021-01-02 16:04:08
        // 2021-01-02
        // 02-01-21 16:04:08
    }

### FormatStrToTime ​

将字符串格式化成时间，`format` 参数格式参考注1。

函数签名:

go

    func FormatStrToTime(str, format string, timezone ...string) (time.Time, error)

    func FormatStrToTime(str, format string, timezone ...string) (time.Time, error)

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        result1, _ := datetime.FormatStrToTime("2021-01-02 16:04:08", "yyyy-mm-dd hh:mm:ss")
        result2, _ := datetime.FormatStrToTime("2021-01-02", "yyyy-mm-dd")
        result3, _ := datetime.FormatStrToTime("02-01-21 16:04:08", "dd-mm-yy hh:mm:ss")

        fmt.Println(result1)
        fmt.Println(result2)
        fmt.Println(result3)

        // Output:
        // 2021-01-02 16:04:08 +0000 UTC
        // 2021-01-02 00:00:00 +0000 UTC
        // 2021-01-02 16:04:08 +0000 UTC
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        result1, _ := datetime.FormatStrToTime("2021-01-02 16:04:08", "yyyy-mm-dd hh:mm:ss")
        result2, _ := datetime.FormatStrToTime("2021-01-02", "yyyy-mm-dd")
        result3, _ := datetime.FormatStrToTime("02-01-21 16:04:08", "dd-mm-yy hh:mm:ss")

        fmt.Println(result1)
        fmt.Println(result2)
        fmt.Println(result3)

        // Output:
        // 2021-01-02 16:04:08 +0000 UTC
        // 2021-01-02 00:00:00 +0000 UTC
        // 2021-01-02 16:04:08 +0000 UTC
    }

### NewUnixNow ​

创建一个当前时间的unix时间戳。

函数签名:

go

    type theTime struct {
        unix int64
    }
    func NewUnixNow() *theTime

    type theTime struct {
        unix int64
    }
    func NewUnixNow() *theTime

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm := datetime.NewUnixNow()
        fmt.Println(tm)

        // Output:
        // &{1647597438}
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm := datetime.NewUnixNow()
        fmt.Println(tm)

        // Output:
        // &{1647597438}
    }

### NewUnix ​

创建一个unix时间戳。

函数签名:

go

    type theTime struct {
        unix int64
    }
    func NewUnix(unix int64) *theTime

    type theTime struct {
        unix int64
    }
    func NewUnix(unix int64) *theTime

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm := datetime.NewUnix(1647597438)
        fmt.Println(tm)

        // Output:
        // &{1647597438}
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm := datetime.NewUnix(1647597438)
        fmt.Println(tm)

        // Output:
        // &{1647597438}
    }

### NewFormat ​

创建一个yyyy-mm-dd hh:mm:ss格式时间字符串的unix时间戳。

函数签名:

go

    type theTime struct {
        unix int64
    }
    func NewFormat(t string) (*theTime, error)

    type theTime struct {
        unix int64
    }
    func NewFormat(t string) (*theTime, error)

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, err := datetime.NewFormat("2022-03-18 17:04:05")
        fmt.Println(tm)

        // Output:
        // &{1647594245}
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, err := datetime.NewFormat("2022-03-18 17:04:05")
        fmt.Println(tm)

        // Output:
        // &{1647594245}
    }

### NewISO8601 ​

创建一个iso8601格式时间字符串的unix时间戳。

函数签名:

go

    type theTime struct {
        unix int64
    }
    func NewISO8601(iso8601 string) (*theTime, error)

    type theTime struct {
        unix int64
    }
    func NewISO8601(iso8601 string) (*theTime, error)

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, err := datetime.NewISO8601("2006-01-02T15:04:05.999Z")
        fmt.Println(tm)

        // Output:
        // &{1136214245}
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, err := datetime.NewISO8601("2006-01-02T15:04:05.999Z")
        fmt.Println(tm)

        // Output:
        // &{1136214245}
    }

### ToUnix ​

返回unix时间戳。

函数签名:

go

    func (t *theTime) ToUnix() int64

    func (t *theTime) ToUnix() int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm := datetime.NewUnixNow()
        fmt.Println(tm.ToUnix())

        // Output:
        // 1647597438
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm := datetime.NewUnixNow()
        fmt.Println(tm.ToUnix())

        // Output:
        // 1647597438
    }

### ToFormat ​

返回格式'yyyy-mm-dd hh:mm:ss'的日期字符串。

函数签名:

go

    func (t *theTime) ToFormat() string

    func (t *theTime) ToFormat() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, _ := datetime.NewFormat("2022-03-18 17:04:05")
        fmt.Println(tm.ToFormat())

        // Output:
        // 2022-03-18 17:04:05
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, _ := datetime.NewFormat("2022-03-18 17:04:05")
        fmt.Println(tm.ToFormat())

        // Output:
        // 2022-03-18 17:04:05
    }

### ToFormatForTpl ​

返回tpl格式指定的日期字符串。

函数签名:

go

    func (t *theTime) ToFormatForTpl(tpl string) string

    func (t *theTime) ToFormatForTpl(tpl string) string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, _ := datetime.NewFormat("2022-03-18 17:04:05")
        ts := tm.ToFormatForTpl("2006/01/02 15:04:05")
        fmt.Println(ts)

        // Output:
        // 2022/03/18 17:04:05
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, _ := datetime.NewFormat("2022-03-18 17:04:05")
        ts := tm.ToFormatForTpl("2006/01/02 15:04:05")
        fmt.Println(ts)

        // Output:
        // 2022/03/18 17:04:05
    }

### ToIso8601 ​

返回iso8601日期字符串。

函数签名:

go

    func (t *theTime) ToIso8601() string

    func (t *theTime) ToIso8601() string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, _ := datetime.NewISO8601("2006-01-02T15:04:05.999Z")
        ts := tm.ToIso8601()
        fmt.Println(ts)

        // Output:
        // 2006-01-02T23:04:05+08:00
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        tm, _ := datetime.NewISO8601("2006-01-02T15:04:05.999Z")
        ts := tm.ToIso8601()
        fmt.Println(ts)

        // Output:
        // 2006-01-02T23:04:05+08:00
    }

### IsLeapYear ​

验证是否是闰年。

函数签名:

go

    func IsLeapYear(year int) bool

    func IsLeapYear(year int) bool

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        result1 := datetime.IsLeapYear(2000)
        result2 := datetime.IsLeapYear(2001)

        fmt.Println(result1)
        fmt.Println(result2)

        // Output:
        // true
        // false
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        result1 := datetime.IsLeapYear(2000)
        result2 := datetime.IsLeapYear(2001)

        fmt.Println(result1)
        fmt.Println(result2)

        // Output:
        // true
        // false
    }

### BetweenSeconds ​

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

函数签名:

go

    func BetweenSeconds(t1 time.Time, t2 time.Time) int64

    func BetweenSeconds(t1 time.Time, t2 time.Time) int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        today := time.Now()
        tomorrow := datetime.AddDay(today, 1)
        yesterday := datetime.AddDay(today, -1)

        result1 := datetime.BetweenSeconds(today, tomorrow)
        result2 := datetime.BetweenSeconds(today, yesterday)

        fmt.Println(result1)
        fmt.Println(result2)

        // Output:
        // 86400
        // -86400
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        today := time.Now()
        tomorrow := datetime.AddDay(today, 1)
        yesterday := datetime.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

    func DayOfYear(t time.Time) int

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/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
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/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
    }

### IsWeekend（已废弃, 使用 '== Weekday'） ​

判断日期是否是周末。

函数签名:

go

    func IsWeekend(t time.Time) bool

    func IsWeekend(t time.Time) bool

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        date1 := time.Date(2023, 06, 03, 0, 0, 0, 0, time.Local)
        date2 := time.Date(2023, 06, 04, 0, 0, 0, 0, time.Local)
        date3 := time.Date(2023, 06, 02, 0, 0, 0, 0, time.Local)

        result1 := datetime.IsWeekend(date1)
        result2 := datetime.IsWeekend(date2)
        result3 := datetime.IsWeekend(date3)

        fmt.Println(result1)
        fmt.Println(result2)
        fmt.Println(result3)

        // Output:
        // true
        // true
        // false
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        date1 := time.Date(2023, 06, 03, 0, 0, 0, 0, time.Local)
        date2 := time.Date(2023, 06, 04, 0, 0, 0, 0, time.Local)
        date3 := time.Date(2023, 06, 02, 0, 0, 0, 0, time.Local)

        result1 := datetime.IsWeekend(date1)
        result2 := datetime.IsWeekend(date2)
        result3 := datetime.IsWeekend(date3)

        fmt.Println(result1)
        fmt.Println(result2)
        fmt.Println(result3)

        // Output:
        // true
        // true
        // false
    }

### NowDateOrTime ​

根据指定的格式和时区返回当前时间字符串。

函数签名:

go

    func NowDateOrTime(format string, timezone ...string) string

    func NowDateOrTime(format string, timezone ...string) string

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        result1 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss")

    	result2 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss", "EST")

        fmt.Println(result1)
        fmt.Println(result2)

        // Output:
        // 2023-07-26 15:01:30
        // 2023-07-26 02:01:30
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        result1 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss")

    	result2 := datetime.NowDateOrTime("yyyy-mm-dd hh:mm:ss", "EST")

        fmt.Println(result1)
        fmt.Println(result2)

        // Output:
        // 2023-07-26 15:01:30
        // 2023-07-26 02:01:30
    }

### Timestamp ​

返回当前秒级时间戳。

函数签名:

go

    func Timestamp(timezone ...string) int64

    func Timestamp(timezone ...string) int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.Timestamp()

        fmt.Println(ts)

        // Output:
        // 1690363051
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.Timestamp()

        fmt.Println(ts)

        // Output:
        // 1690363051
    }

### TimestampMilli ​

返回当前毫秒级时间戳。

函数签名:

go

    func TimestampMilli(timezone ...string) int64

    func TimestampMilli(timezone ...string) int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.TimestampMilli()

        fmt.Println(ts)

        // Output:
        // 1690363051331
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.TimestampMilli()

        fmt.Println(ts)

        // Output:
        // 1690363051331
    }

### TimestampMicro ​

返回当前微秒级时间戳。

函数签名:

go

    func TimestampMicro(timezone ...string) int64

    func TimestampMicro(timezone ...string) int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.TimestampMicro()

        fmt.Println(ts)

        // Output:
        // 1690363051331784
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.TimestampMicro()

        fmt.Println(ts)

        // Output:
        // 1690363051331784
    }

### TimestampNano ​

返回当前纳秒级时间戳。

函数签名:

go

    func TimestampNano(timezone ...string) int64

    func TimestampNano(timezone ...string) int64

示例:运行

go

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.TimestampNano()

        fmt.Println(ts)

        // Output:
        // 1690363051331788000
    }

    package main

    import (
        "fmt"
        "github.com/duke-git/lancet/v2/datetime"
    )

    func main() {
        ts := datetime.TimestampNano()

        fmt.Println(ts)

        // Output:
        // 1690363051331788000
    }