竹简文档

时间处理

格式化、解析、范围计算、年龄计算等时间工具

时间处理

xUtil.Timer() 提供常用的时间处理函数,包括格式化、解析、范围计算、年龄计算等。

import xUtil "github.com/xiaolfeng/bamboo-base-go/common/utility"

入口函数

utility.go
func Timer() *pack.Timer

预定义格式

package/time.go
const (
    TimeFormatDate     = "2006-01-02"           // 日期格式
    TimeFormatDateTime = "2006-01-02 15:04:05"  // 日期时间格式
    TimeFormatTime     = "15:04:05"             // 时间格式
    TimeFormatISO8601  = "2006-01-02T15:04:05Z07:00"  // ISO8601 格式
    TimeFormatUnix     = "1136239445"         // Unix 时间戳格式
)

获取当前时间

Now

获取当前时间:

package/time.go
func (t *Timer) Now() time.Time

NowUnix

获取当前 Unix 时间戳(秒):

package/time.go
func (t *Timer) NowUnix() int64

NowUnixMilli

获取当前 Unix 时间戳(毫秒):

package/time.go
func (t *Timer) NowUnixMilli() int64
now := xUtil.Timer().Now()              // time.Time
unix := xUtil.Timer().NowUnix()         // 1738387200
milli := xUtil.Timer().NowUnixMilli()   // 1738387200000

格式化

Format

格式化时间为字符串:

package/time.go
func (t *Timer) Format(time time.Time, layout string) string

FormatNow

格式化当前时间:

package/time.go
func (t *Timer) FormatNow(layout string) string
xUtil.Timer().Format(time.Now(), xUtil.TimeFormatDate)      // "2026-02-02"
xUtil.Timer().Format(time.Now(), xUtil.TimeFormatDateTime)  // "2026-02-02 15:04:05"
xUtil.Timer().FormatNow(xUtil.TimeFormatDate)                 // "2026-02-02"
xUtil.Timer().FormatNow("20060102")                           // "20260202"

解析

Parse

解析时间字符串:

package/time.go
func (t *Timer) Parse(layout, value string) (time.Time, error)

MustParse

解析时间字符串(失败时 panic):

package/time.go
func (t *Timer) MustParse(layout, value string) time.Time
t, err := xUtil.Timer().Parse(xUtil.TimeFormatDate, "2026-02-02")
t := xUtil.Timer().MustParse(xUtil.TimeFormatDate, "2026-02-02")
t := xUtil.Timer().MustParse("20060102", "20260202")  // 使用自定义格式

FromUnix

从 Unix 时间戳(秒)解析:

package/time.go
func (t *Timer) FromUnix(unix int64) time.Time

FromUnixMilli

从 Unix 时间戳(毫秒)解析:

package/time.go
func (t *Timer) FromUnixMilli(unixMilli int64) time.Time
t1 := xUtil.Timer().FromUnix(1738387200)        // time.Time
t2 := xUtil.Timer().FromUnixMilli(1738387200000)  // time.Time

时间判断

IsToday

判断是否为今天:

package/time.go
func (t *Timer) IsToday(t time.Time) bool

IsYesterday

判断是否为昨天:

package/time.go
func (t *Timer) IsYesterday(t time.Time) bool

IsWeekend

判断是否为周末:

package/time.go
func (t *Timer) IsWeekend(t time.Time) bool
xUtil.Timer().IsToday(time.Now())       // true
xUtil.Timer().IsYesterday(yesterday)   // true
xUtil.Timer().IsWeekend(saturday)      // true

时间范围

StartOfDay / EndOfDay

获取当天的开始和结束时间:

package/time.go
func (t *Timer) StartOfDay(t time.Time) time.Time   // 00:00:00
func (t *Timer) EndOfDay(t time.Time) time.Time     // 23:59:59.999999999

StartOfWeek / EndOfWeek

获取本周的开始和结束时间(周一为一周开始):

package/time.go
func (t *Timer) StartOfWeek(t time.Time) time.Time  // 周一 00:00:00
func (t *Timer) EndOfWeek(t time.Time) time.Time    // 周日 23:59:59.999999999

StartOfMonth / EndOfMonth

获取本月的开始和结束时间:

package/time.go
func (t *Timer) StartOfMonth(t time.Time) time.Time // 1日 00:00:00
func (t *Timer) EndOfMonth(t time.Time) time.Time   // 月末 23:59:59.999999999

示例:

now := time.Now()

// 今天的时间范围
start := xUtil.Timer().StartOfDay(now)   // 2026-02-02 00:00:00
end := xUtil.Timer().EndOfDay(now)       // 2026-02-02 23:59:59.999999999

// 本周的时间范围
weekStart := xUtil.Timer().StartOfWeek(now)  // 2026-02-02 00:00:00(周一)
weekEnd := xUtil.Timer().EndOfWeek(now)      // 2026-02-08 23:59:59.999999999(周日)

// 本月的时间范围
monthStart := xUtil.Timer().StartOfMonth(now)  // 2026-02-01 00:00:00
monthEnd := xUtil.Timer().EndOfMonth(now)      // 2026-02-28 23:59:59.999999999

时间差计算

DiffDays

计算天数差:

package/time.go
func (t *Timer) DiffDays(t1, t2 time.Time) int

DiffHours

计算小时差:

package/time.go
func (t *Timer) DiffHours(t1, t2 time.Time) float64

DiffMinutes

计算分钟差:

package/time.go
func (t *Timer) DiffMinutes(t1, t2 time.Time) float64
t1 := time.Now()
t2 := t1.AddDate(0, 0, -7)

xUtil.Timer().DiffDays(t1, t2)     // 7
xUtil.Timer().DiffHours(t1, t2)    // 168.0
xUtil.Timer().DiffMinutes(t1, t2)  // 10080.0

年龄计算

Age

根据生日计算年龄:

package/time.go
func (t *Timer) Age(birthday time.Time) int
birthday := xUtil.Timer().MustParse(xUtil.TimeFormatDate, "2000-01-01")
age := xUtil.Timer().Age(birthday)  // 26(假设当前是 2026 年)

下一步

On this page