fox/xtime/duration.go

84 lines
2.3 KiB
Go
Raw Normal View History

2025-05-25 20:02:15 +08:00
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)
}