120 lines
3.4 KiB
Go
120 lines
3.4 KiB
Go
package timehelper
|
||
|
||
import "time"
|
||
|
||
//GetDateUnixDate 返回带毫秒的时间戳,如果需要转化为时间类型time,
|
||
//不带毫秒的:time.Unix(1663315884651/1000,0),
|
||
//带毫秒的time.Unix(1663315884651/1000, 1000000*(1663315884651%1000))
|
||
func GetDateUnixDate(date time.Time) int64 {
|
||
return date.UnixMilli() //Unix() //* 1000
|
||
}
|
||
|
||
//GetUnixDate 时间撮转化为time类型
|
||
func GetUnixDate(date int64) time.Time {
|
||
return time.Unix(date/1000, 1000000*(date%1000))
|
||
}
|
||
|
||
func ConvertTimeLocalSec(date int64) time.Time {
|
||
d1 := time.Unix(date/1000, 1000000*(date%1000))
|
||
d2 := time.Date(d1.Year(), d1.Month(), d1.Day(), d1.Hour(), d1.Minute(), d1.Second(), d1.Nanosecond(), time.Local)
|
||
return d2
|
||
}
|
||
|
||
//TimeSubDays 时间间隔天数
|
||
func TimeSubDays(t1, t2 time.Time) int {
|
||
|
||
if t1.Location().String() != t2.Location().String() {
|
||
return -1
|
||
}
|
||
hours := t1.Sub(t2).Hours()
|
||
|
||
if hours <= 0 {
|
||
return -1
|
||
}
|
||
// sub hours less than 24
|
||
if hours < 24 {
|
||
// may same day
|
||
t1y, t1m, t1d := t1.Date()
|
||
t2y, t2m, t2d := t2.Date()
|
||
isSameDay := t1y == t2y && t1m == t2m && t1d == t2d
|
||
|
||
if isSameDay {
|
||
return 0
|
||
}
|
||
return 1
|
||
}
|
||
// equal or more than 24
|
||
if (hours/24)-float64(int(hours/24)) == 0 { // just 24's times
|
||
return int(hours / 24)
|
||
}
|
||
// more than 24 hours
|
||
return int(hours/24) + 1
|
||
}
|
||
|
||
//ConvertTimeLocal 时间在数据库返回给结构体的时候,结构体的时间时区是非本地的,需要转化为本地的再转变为时间戳
|
||
func ConvertTimeLocal(d1 time.Time) time.Time {
|
||
d2 := time.Date(d1.Year(), d1.Month(), d1.Day(), d1.Hour(), d1.Minute(), d1.Second(), 0, time.Local)
|
||
return d2
|
||
}
|
||
|
||
//ConvertTimeDayLocal s
|
||
func ConvertTimeDayLocal(d1 time.Time) time.Time {
|
||
d2 := time.Date(d1.Year(), d1.Month(), d1.Day(), 0, 0, 0, 0, time.Local)
|
||
return d2
|
||
}
|
||
|
||
//转为时分秒
|
||
func ToTimeHour(ltime int64) string {
|
||
now := IntToTime(ltime)
|
||
return now.Format("15:04:05")
|
||
}
|
||
|
||
// func ParseInLocation(layout, value string, loc *Location) (Time, error) (layout已带时区时可直接用Parse)
|
||
//time.ParseInLocation("2006-01-02 15:04:05", "2017-05-11 14:06:06", time.Local)
|
||
|
||
//转为时间类型
|
||
func IntToTime(intime int64) time.Time {
|
||
return time.Unix(intime/1000, 0)
|
||
}
|
||
|
||
//GetPastDay 当前时间算起,过去num天内的开始日期、结束日期
|
||
func GetPastDay(num int) (start, end time.Time) {
|
||
tn := time.Now()
|
||
//当前时间,天数为单位
|
||
nowday := time.Date(tn.Year(), tn.Month(), tn.Day(), 0, 0, 0, 0, time.Local)
|
||
//过去30天
|
||
oldTime := nowday.AddDate(0, 0, -num)
|
||
return oldTime, nowday
|
||
}
|
||
|
||
//ConvertTimeToString 格式时间,返回前台,yyyy-mm-dd hh:mm:ss
|
||
func ConvertTimeToString(t time.Time) string {
|
||
return t.Format("2006-01-02 15:04:05")
|
||
}
|
||
|
||
//ConvertStringToTime 格式时间,返回前台,yyyy-mm-dd hh:mm:ss
|
||
func ConvertStringToTime(t string) time.Time {
|
||
t2, _ := time.Parse("2006-01-02 15:04:05", t)
|
||
return t2
|
||
}
|
||
|
||
//ConvertTimeToStringMin 格式时间,返回前台,yyyy-mm-dd hh:mm:ss
|
||
func ConvertTimeToStringMin(t time.Time) string {
|
||
return t.Format("2006-01-02 15:04")
|
||
}
|
||
|
||
//ConvertTimeToStringDay 格式时间,返回前台,yyyy-mm-dd
|
||
func ConvertTimeToStringDay(t time.Time) string {
|
||
return t.Format("2006-01-02")
|
||
}
|
||
|
||
//ConvertTimeToString2 格式时间,返回前台,yyyy.mm.dd hh:mm 2020.06.02 17:50
|
||
func ConvertTimeToString2(t time.Time) string {
|
||
return t.Format("2006.01.02 15:04")
|
||
}
|
||
|
||
//ConvertTimeToStringYear 格式时间,返回前台,mm-dd yyyy
|
||
func ConvertTimeToStringYear(s time.Time) string {
|
||
return s.Format("01-02 2006")
|
||
}
|