@@ -0,0 +1,82 @@
|
||||
package timerange
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
type TimeRange struct {
|
||||
Head time.Time
|
||||
Tail time.Time
|
||||
}
|
||||
|
||||
func (t *TimeRange) HeadAddDay(d time.Duration) TimeRange {
|
||||
return TimeRange{
|
||||
Head: t.Head.Add(d),
|
||||
Tail: t.Tail,
|
||||
}
|
||||
}
|
||||
|
||||
func (t *TimeRange) TailAddDay(d time.Duration) TimeRange {
|
||||
return TimeRange{
|
||||
Head: t.Head,
|
||||
Tail: t.Tail.Add(d),
|
||||
}
|
||||
}
|
||||
|
||||
func (t *TimeRange) TotalDays() int64 {
|
||||
return int64(math.Floor(float64(t.Tail.Sub(t.Head).Hours() / 24)))
|
||||
}
|
||||
|
||||
func (t *TimeRange) SplitByMinute(minute int64) []TimeRange {
|
||||
count := int(t.Tail.Sub(t.Head)/time.Minute) / int(minute)
|
||||
var split = make([]TimeRange, 0, count)
|
||||
temp := t.Head
|
||||
if t.Tail.After(temp) {
|
||||
sub := temp.Add(time.Duration(minute) * time.Minute)
|
||||
if sub.After(t.Tail) { //防止tail超出设定值
|
||||
sub = t.Tail
|
||||
}
|
||||
subRange := TimeRange{ //一个切片
|
||||
Head: temp,
|
||||
Tail: sub,
|
||||
}
|
||||
split = append(split, subRange)
|
||||
temp = sub
|
||||
}
|
||||
return split
|
||||
}
|
||||
|
||||
// LocDayRange 本地当日时间范围
|
||||
func LocDayRange(position time.Time) TimeRange {
|
||||
head := time.Date(position.Year(), position.Month(), position.Day(), 0, 0, 0, 0, position.Location()).In(time.Local)
|
||||
tail := head.AddDate(0, 0, 1)
|
||||
return TimeRange{
|
||||
Head: head,
|
||||
Tail: tail,
|
||||
}
|
||||
}
|
||||
|
||||
// LocDayRange 本地当月时间范围
|
||||
func LocMonthRange(position time.Time) TimeRange {
|
||||
head := time.Date(position.Year(), position.Month(), 1, 0, 0, 0, 0, position.Location()).In(time.Local)
|
||||
tail := head.AddDate(0, 1, 0)
|
||||
return TimeRange{
|
||||
Head: head,
|
||||
Tail: tail,
|
||||
}
|
||||
}
|
||||
|
||||
func RecentMinute(tim time.Time, scaleMinute int64) time.Time {
|
||||
minute := int64(tim.Minute())
|
||||
lave := minute % scaleMinute
|
||||
formatMinute := minute - lave
|
||||
return time.Date(tim.Year(), tim.Month(), tim.Day(), tim.Hour(), int(formatMinute), 0, 0, tim.Location())
|
||||
}
|
||||
|
||||
func RecentSecond(tim time.Time, scaleSecond int64) time.Time {
|
||||
second := int64(tim.Second())
|
||||
lave := second % scaleSecond
|
||||
formatSecond := second - lave
|
||||
return time.Date(tim.Year(), tim.Month(), tim.Day(), tim.Hour(), tim.Minute(), int(formatSecond), 0, tim.Location())
|
||||
}
|
||||
Reference in New Issue
Block a user