Files
Erupe/server/channelserver/sys_timefix.go
2022-08-14 17:38:25 +10:00

59 lines
1.6 KiB
Go

package channelserver
import (
"fmt"
"time"
)
var (
Offset = 9
YearAdjust = -7
MonthAdjust = 0
DayAdjust = 0
)
var (
TimeStatic = time.Time{}
)
func Time_Current() time.Time {
baseTime := time.Now().In(time.FixedZone(fmt.Sprintf("UTC+%d", Offset), Offset*60*60))
return baseTime
}
func Time_Current_Adjusted() time.Time {
baseTime := time.Now().In(time.FixedZone(fmt.Sprintf("UTC+%d", Offset), Offset*60*60)).AddDate(YearAdjust, MonthAdjust, DayAdjust)
return time.Date(baseTime.Year(), baseTime.Month(), baseTime.Day(), baseTime.Hour(), baseTime.Minute(), baseTime.Second(), baseTime.Nanosecond(), baseTime.Location())
}
func Time_Current_Midnight() time.Time {
baseTime := time.Now().In(time.FixedZone(fmt.Sprintf("UTC+%d", Offset), Offset*60*60)).AddDate(YearAdjust, MonthAdjust, DayAdjust)
return time.Date(baseTime.Year(), baseTime.Month(), baseTime.Day(), 0, 0, 0, 0, baseTime.Location())
}
func TimeWeekStart() time.Time {
midnight := Time_Current_Midnight()
offset := (int(midnight.Weekday()) - 1) * -24
return midnight.Add(time.Hour * time.Duration(offset))
}
func TimeWeekNext() time.Time {
return TimeWeekStart().Add(time.Hour * 24 * 7)
}
func Time_Current_Week_uint8() uint8 {
baseTime := time.Now().In(time.FixedZone(fmt.Sprintf("UTC+%d", Offset), Offset*60*60)).AddDate(YearAdjust, MonthAdjust, DayAdjust)
_, thisWeek := baseTime.ISOWeek()
_, beginningOfTheMonth := time.Date(baseTime.Year(), baseTime.Month(), 1, 0, 0, 0, 0, baseTime.Location()).ISOWeek()
return uint8(1 + thisWeek - beginningOfTheMonth)
}
func Time_static() time.Time {
if TimeStatic.IsZero() {
TimeStatic = Time_Current_Adjusted()
}
return TimeStatic
}