204 lines
5.0 KiB
Go
204 lines
5.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/sys/configure"
|
|
"math"
|
|
"time"
|
|
|
|
"github.com/jinzhu/now"
|
|
)
|
|
|
|
// 判断时间点处于今天
|
|
func IsToday(d int64) bool {
|
|
tt := time.Unix(d, 0)
|
|
now := configure.Now()
|
|
|
|
return tt.Year() == now.Year() && tt.Month() == now.Month() && tt.Day() == now.Day()
|
|
}
|
|
func IsNextToday(d int64) bool {
|
|
d += 24 * 3600
|
|
tt := time.Unix(d, 0)
|
|
now := configure.Now()
|
|
return tt.Year() == now.Year() && tt.Month() == now.Month() && tt.Day() == now.Day()
|
|
}
|
|
|
|
// 判断是否是出于同一周
|
|
func IsSameWeek(d int64) bool {
|
|
// 将时间戳转换为 time.Time 类型
|
|
time1 := time.Unix(d, 0)
|
|
time2 := configure.Now()
|
|
|
|
// 获取时间戳所属的年份和周数
|
|
year1, week1 := time1.ISOWeek()
|
|
year2, week2 := time2.ISOWeek()
|
|
|
|
// 判断是否同一年同一周
|
|
if year1 == year2 && week1 == week2 {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
// 判断是否大于1周
|
|
func IsAfterWeek(d int64) bool {
|
|
tt := time.Unix(d, 0)
|
|
nowt := configure.Now()
|
|
if !tt.Before(nowt) {
|
|
return false
|
|
}
|
|
at := now.With(tt).AddDate(0, 0, 7).Unix()
|
|
return nowt.Unix() >= at
|
|
}
|
|
|
|
// 是否今日首次
|
|
func IsFirstTody(timestamp int64) bool {
|
|
now := configure.Now()
|
|
if timestamp == 0 || timestamp > now.Unix() {
|
|
return false
|
|
}
|
|
tt := time.Unix(timestamp, 0)
|
|
if !IsToday(timestamp) {
|
|
if tt.Before(now) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// 获取当前时间戳下一天0点时间戳
|
|
func GetZeroTime(curTime int64) int64 {
|
|
currentTime := time.Unix(curTime, 0)
|
|
startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location())
|
|
|
|
return startTime.Unix() + 86400 //3600*24
|
|
}
|
|
|
|
func IsYestoday(timestamp int64) bool {
|
|
tt := time.Unix(timestamp, 0)
|
|
yesTime := configure.Now().AddDate(0, 0, -1)
|
|
return tt.Year() == yesTime.Year() && tt.Month() == yesTime.Month() && tt.Day() == yesTime.Day()
|
|
}
|
|
|
|
// 确定换算规则 现实1H = 虚拟4H
|
|
// 计算:根据开服时间为起始时间,计算当前时间与起始时间的差值,计算虚拟当前时间
|
|
func MatrixingHour(beginTime string) (t time.Time) {
|
|
location, err := time.LoadLocation("Asia/Shanghai")
|
|
if err != nil {
|
|
return
|
|
}
|
|
myConfig := &now.Config{
|
|
WeekStartDay: time.Monday,
|
|
TimeLocation: location,
|
|
TimeFormats: []string{"2006-01-02 15:04:05"},
|
|
}
|
|
|
|
serverStartTime, _ := myConfig.Parse(beginTime)
|
|
|
|
n := configure.Now()
|
|
timeSub := n.Sub(serverStartTime)
|
|
hourSub := timeSub.Hours() * 2
|
|
|
|
hh, _ := time.ParseDuration("1h")
|
|
fmt.Println(hourSub, math.Ceil(hourSub))
|
|
t2 := serverStartTime.Add(hh * time.Duration(math.Ceil(hourSub)))
|
|
|
|
fmt.Println(t2)
|
|
|
|
return
|
|
}
|
|
|
|
// 时间戳格式化字符串日期
|
|
func FormatStr(timestamp int64, format string) string {
|
|
if format == "" {
|
|
format = "2006-01-02 15:04:05"
|
|
}
|
|
return time.Unix(timestamp, 0).Format(format)
|
|
}
|
|
|
|
func AddHour(hour int) time.Time {
|
|
return configure.Now().Add(time.Duration(hour) * time.Hour)
|
|
}
|
|
|
|
// CD
|
|
func IsInCDHour(cdTime int64) bool {
|
|
if cdTime == 0 {
|
|
return false
|
|
}
|
|
return configure.Now().Unix() < cdTime
|
|
}
|
|
|
|
// 获取本月的开始和结束的时间戳
|
|
func GetMonthStart() int64 {
|
|
t := configure.Now()
|
|
monthStartDay := t.AddDate(0, 0, -t.Day()+1)
|
|
monthStartTime := time.Date(monthStartDay.Year(), monthStartDay.Month(), monthStartDay.Day(), 0, 0, 0, 0, t.Location())
|
|
_d1 := monthStartTime.Unix()
|
|
return _d1
|
|
}
|
|
|
|
// 获取本月的开始和结束的时间戳
|
|
func GetMonthStartEnd() (int64, int64) {
|
|
t := configure.Now()
|
|
monthStartDay := t.AddDate(0, 0, -t.Day()+1)
|
|
monthStartTime := time.Date(monthStartDay.Year(), monthStartDay.Month(), monthStartDay.Day(), 0, 0, 0, 0, t.Location())
|
|
monthEndDay := monthStartTime.AddDate(0, 1, -1)
|
|
monthEndTime := time.Date(monthEndDay.Year(), monthEndDay.Month(), monthEndDay.Day(), 23, 59, 59, 0, t.Location())
|
|
_d1 := monthStartTime.Unix()
|
|
_d2 := monthEndTime.Unix()
|
|
fmt.Printf("%d,%d", _d1, _d2)
|
|
return _d1, _d2
|
|
}
|
|
|
|
// 获取今天零点时间戳
|
|
func GetTodayZeroTime(curTime int64) int64 {
|
|
currentTime := time.Unix(curTime, 0)
|
|
startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location())
|
|
|
|
return startTime.Unix()
|
|
}
|
|
|
|
// 计算自然天数
|
|
func DiffDays(t1, t2 int64) int {
|
|
if t1 == t2 {
|
|
return -1
|
|
}
|
|
|
|
if t1 > t2 {
|
|
t1, t2 = t2, t1
|
|
}
|
|
|
|
secOfDay := 3600 * 24
|
|
diffDays := 0
|
|
secDiff := t2 - t1
|
|
if secDiff > int64(secOfDay) {
|
|
tmpDays := int(secDiff / int64(secOfDay))
|
|
t1 += int64(tmpDays) * int64(secOfDay)
|
|
diffDays += tmpDays
|
|
}
|
|
st := time.Unix(t1, 0)
|
|
et := time.Unix(t2, 0)
|
|
dateformat := "20060102"
|
|
if st.Format(dateformat) != et.Format(dateformat) {
|
|
diffDays += 1
|
|
}
|
|
return diffDays
|
|
}
|
|
|
|
func WeekIntervalTime() (endTime int64) {
|
|
now := time.Now()
|
|
offset := int(time.Monday - now.Weekday())
|
|
//周日做特殊判断 因为time.Monday = 0
|
|
if offset > 0 {
|
|
offset = -6
|
|
}
|
|
|
|
year, month, day := now.Date()
|
|
thisWeek := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
|
|
//startTime = thisWeek.AddDate(0, 0, offset+7*week).Unix()
|
|
endTime = thisWeek.AddDate(0, 0, offset+7).Unix()
|
|
|
|
return endTime
|
|
}
|