package xtime import ( "time" ) // 刷新点:时间边界 func GetDuration(t time.Time) (d time.Duration) { return t.Sub(time.Now()) } // 现在到明日刷新点的剩余时间间隔 func GetDurationToNextHour() (d time.Duration) { return GetDurationToNextNHour(1) } // 现在到第N天刷新点的剩余时间间隔 (n为1是明天) func GetDurationToNextNHour(n int) (d time.Duration) { now := Now().StdTime() next := Now().AddHours(n).StartOfHour().StdTime() return next.Sub(now) } // 现在到明日刷新点的剩余时间间隔 func GetDurationToTomorrow() (d time.Duration) { return GetDurationToNextNDay(1) } // 现在到第N天刷新点的剩余时间间隔 (n为1是明天) func GetDurationToNextNDay(n int) (d time.Duration) { now := Now().StdTime() next := Now().AddDays(n).StartOfDay().StdTime() return next.Sub(now) } // 现在到下周刷新点的剩余时间间隔 func GetDurationToNextWeek() (expiration time.Duration) { return GetDurationToNextNWeek(1) } // 现在到下N周刷新点的剩余时间间隔 (n为1是下周) func GetDurationToNextNWeek(n int) (expiration time.Duration) { now := Now().StdTime() nextN := Now().AddWeeks(n).StartOfWeek().StdTime() return nextN.Sub(now) } // 现在到下月刷新点的剩余时间间隔 func GetDurationToNextMonth() (expiration time.Duration) { return GetDurationToNextNMonth(1) } // 现在到下N月刷新点的剩余时间间隔 (n为1是下月) func GetDurationToNextNMonth(n int) (expiration time.Duration) { now := Now().StdTime() nextN := Now().AddMonths(n).StartOfMonth().StdTime() return nextN.Sub(now) } // 现在到下季度刷新点的剩余时间间隔 func GetDurationToNextQuarter() (expiration time.Duration) { return GetDurationToNextNQuarter(1) } // 现在到下N季度刷新点的剩余时间间隔 (n为1是下年) func GetDurationToNextNQuarter(n int) (expiration time.Duration) { now := Now().StdTime() nextN := Now().AddQuarters(n).StartOfQuarter().StdTime() return nextN.Sub(now) } // 现在到下年刷新点的剩余时间间隔 func GetDurationToNextYear() (expiration time.Duration) { return GetDurationToNextNYear(1) } // 现在到下N年刷新点的剩余时间间隔 (n为1是下年) func GetDurationToNextNYear(n int) (expiration time.Duration) { now := Now().StdTime() nextN := Now().AddYears(n).StartOfYear().StdTime() return nextN.Sub(now) }