获取n天前或后的日期:
// GetBeforeTime 获取n天前的秒时间戳、日期时间戳
// _day为负则代表取前几天,为正则代表取后几天,0则为今天
func GetBeforeTime(_day int) (int64, string) {
// 时区
//timeZone, _ := time.LoadLocation(ServerInfo["timezone"])
timeZone := time.FixedZone("CST", 8*3600) // 东八区
// 前n天
nowTime := time.Now().In(timeZone)
beforeTime := nowTime.AddDate(0, 0, _day)
// 时间转换格式
beforeTimeS := beforeTime.Unix() // 秒时间戳
beforeDate := time.Unix(beforeTimeS, 0).Format("20060102150405") // 固定格式的日期时间戳
return beforeTimeS, beforeDate
}
日期转秒时间戳:
// DateToTimeS 日期时间戳转时间戳,s
// _date为日期字符串
// format为日期字符串的的排布格式,支持YmdHis、Y-m-d H:i:s
func DateToTimeS(_date string, format string) int64 {
var date string
date = _date
var layout string
if format == "YmdHis" || format == "" {
layout = "20060102150405" // 转化所需内定模板
}else if format == "Y-m-d H:i:s" {
layout = "2006-01-02 15:04:05"
}else if format == "Y年m月d日 H:i:s" {
layout = "2006年01月02日 15:04:05"
}else {
layout = "20060102150405"
}
//日期转化为时间戳
loc, _ := time.LoadLocation("Local") //获取时区
tmp, _ := time.ParseInLocation(layout, date, loc)
timestamp := tmp.Unix() //转化为时间戳 类型是int64
return timestamp
}
计算两个日期之间的天数差:
// DatesBetweenDay 计算两个日期之间有多少天间隔
// 支持YmdHis、Y-m-d H:i:s格式日期,startDate开始日期,endDate结束日期
// ±天数取决于开始时间和结束时间谁大
func DatesBetweenDay(startDate string, endDate string, format string) (day int64) {
// 日期转秒时间戳
startTime := DateToTimeS(startDate, format)
endTime := DateToTimeS(endDate, format)
// 获取日期秒之差
dayTime := endTime - startTime
// 时分秒将被忽略,只取天的部分
day = int64(math.Floor(float64(dayTime / (24 * 60 * 60))))
return
}
-
示例:
func main() {
day1 := -2
before1, date1:= GetBeforeTime(day1)
fmt.Println(before1)
fmt.Println(date1)
day2 := -5
before2, date2:= GetBeforeTime(day2)
fmt.Println(before2)
fmt.Println(date2)
day := DatesBetweenDay(date2, date1, "YmdHis")
fmt.Println(day)
}
返回:
fyonecon@DJqinshihuang godemo % go run demo5.go
1621049966
20210515113926
1620790766
20210512113926
3
-



