You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.2 KiB
Go

package stime
import (
"fmt"
"strconv"
"time"
)
// 根据指定时间获取后面的若干天工作日列表
// param baseOn 指定基准时间
// param daysNum 获取工作日的数量
func GetWorkDayList(baseOn *time.Time, daysNum int) []time.Time {
var timeList []time.Time
var basCount = 1
var workDay time.Time
for {
if len(timeList) == daysNum {
break
}
workDay = baseOn.AddDate(0, 0, basCount)
switch workDay.Weekday() {
case time.Saturday:
basCount += 2
continue
case time.Sunday:
basCount++
continue
default:
timeList = append(timeList, workDay)
basCount++
}
}
return timeList
}
// 根据指定时间获取后面的若干天工作日列表
// param baseOn 指定基准时间
// param daysNum 获取工作日的数量
func GetWorkDayStrList(baseOn *time.Time, daysNum int) []string {
var timeList []string
var basCount = 1
var workDay time.Time
for {
if len(timeList) == daysNum {
break
}
workDay = baseOn.AddDate(0, 0, basCount)
switch workDay.Weekday() {
case time.Saturday:
basCount += 2
continue
case time.Sunday:
basCount++
continue
default:
timeList = append(timeList, TimeToString(workDay, Format_Normal_YMD))
basCount++
}
}
return timeList
}
// 获取时间差文字描述
func GetTimeDifferenceDesc(now *time.Time, before *time.Time) string {
if before == nil {
return ""
}
if now.After(*before) {
subTimestamp := now.Unix() - before.Unix()
day := subTimestamp / (3600 * 24)
hour := (subTimestamp - day*3600*24) / 3600
minute := (subTimestamp - day*3600*24 - hour*3600) / 60
second := subTimestamp - day*3600*24 - hour*3600 - minute*60
switch {
case day > 0:
if hour > 0 {
return fmt.Sprintf("%d天%d小时", day, hour)
} else {
return fmt.Sprintf("%d天", day)
}
case hour > 0:
if minute < 10 {
return fmt.Sprintf("%d小时", hour)
} else {
return fmt.Sprintf("%d小时%d", hour, minute)
}
case hour == 0 && minute > 0:
return fmt.Sprintf("%d分钟", minute)
case hour == 0 && minute == 0:
return fmt.Sprintf("%d秒", second)
}
}
return ""
}
// TimeStampToBytes 时间戳转字节
func TimeStampToBytes(stamp int64) []byte {
timeStr := strconv.FormatInt(stamp, 2)
return []byte(timeStr)
}