package finishtime import ( _ "log" "qfw/util" "time" "github.com/tealeg/xlsx" ) /* time_two 紧急程度的时间的时间戳 timeNow 当前时间戳 unix_time 零点时间戳 finishtime 完成时间 timeInt time_twelve time_thirteen_thirty */ var time_two, timeNow, ret, unix_time, finishtime, time_twelve, time_eight_thirty, time_ten_thirty, time_thirteen_thirty, time_fitteen_thirty, time_eightten, time_dvalueS int64 var finishdate, date string var err error var Holiday []map[string]interface{} //初始数据 func init() { timeNow = time.Now().Unix() //当前时间戳 time_two = 7200 date = time.Unix(timeNow, 0).Format("2006-01-02") the_time, err := time.ParseInLocation("2006-01-02", date, time.Local) if err == nil { unix_time = the_time.Unix() } time_eight_thirty = unix_time + 30600 //当前日期08:30的时间戳 time_ten_thirty = unix_time + 37800 //当前日期10:30的时间戳 time_twelve = unix_time + 43200 //当前日期12:00的时间戳 time_thirteen_thirty = unix_time + 48600 //当前日期13:30的时间戳 time_fitteen_thirty = unix_time + 55800 //当前日期15:30点的时间戳 time_eightten = unix_time + 64800 //当前日期18:00点的时间戳 } func LastTime(timeHour int) int64 { //func main() { var days int //传入时间 //timeHour := 120 //传入当前时间戳 time_now := time.Now().Unix() if time_now <= time_eight_thirty { time_now = time_eight_thirty } else if time_now > time_twelve && time_now <= time_thirteen_thirty { time_now = time_thirteen_thirty } if timeHour == 2 { //传来2并且时间戳在12点之前 上午导入 if time_now <= time_twelve && time_now >= time_eight_thirty { time_dvalueS = time_twelve - time_now - time_two ret = twoBeforeTwelve(time_dvalueS) } else if time_now >= time_thirteen_thirty && time_now < time_eightten { //传来2并且时间戳在13:30点之后 下午导入 time_dvalueS = time_eightten - time_now - time_two ret = twoAfterTwelve(time_dvalueS) } else if time_now >= time_eightten { //18:00之后导入 finishtime = time_ten_thirty + 86400 ret = getDay(finishtime) //ret = ioExcel(finishtime) } } else if timeHour == 6 { //传来6并且时间戳在10:30点之前 上午导入 当天可完成 if time_now >= time_eight_thirty && time_now <= time_ten_thirty { finishtime = time_eightten - time_ten_thirty + time_now //ret = sixBeforeTenthirty(finishtime) ret = finishtime } else if time_now > time_eight_thirty && time_now <= time_twelve { //传来6并且时间戳在10:30-12:00点 上午导入,第二天完成,验证是否是法定节假日 time_dvalueS = time_twelve - time_now ret = sixAfterTenthirty(time_dvalueS) } else if time_now >= time_thirteen_thirty && time_now <= time_fitteen_thirty { //传来6并且时间戳在13:30-15:30点 下午导入,第二天上午完成,验证是否是法定节假日 time_dvalueS = time_fitteen_thirty - time_now ret = sixBeforeFitteenthirty(time_dvalueS) } else if time_now > time_thirteen_thirty && time_now <= time_eightten { //传来6并且时间戳在15:30-18:00点 下午导入,第二天下午完成,验证是否是法定节假日 time_dvalueS = time_now - time_fitteen_thirty ret = sixAfterFitteenthirty(time_dvalueS) } } else if timeHour == 48 { //2天 days = 2 ret = getDays(days) } else if timeHour == 120 { //5天 days = 5 ret = getDays(days) } return ret } //2小时上午开始 func twoBeforeTwelve(time_dvalue int64) int64 { //10点前导入,上午下班前即可完成 if time_dvalue > 0 { finishtime = time_twelve - time_dvalue //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05") } else { //10-12点之间导入,下午下班前即可完成 finishtime = time_thirteen_thirty - time_dvalue //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05") } return finishtime } //2小时下午开始 func twoAfterTwelve(time_dvalue int64) int64 { //16点前导入,下午下班前即可完成 if time_dvalue > 0 { finishtime = time_eightten - time_dvalue finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05") } else { //16-18点之间导入,第二天上午即可完成,验证是否是法定节假日 finishtime = time_eight_thirty + 86400 - time_dvalue //验证是否是节假日 finishtime = getDay(finishtime) //finishtime = ioExcel(finishtime) } return finishtime } func getDay(finishtime int64) int64 { //finishtime为第二天应该完成的准确时间 now := time.Now().UTC() addtime := now.AddDate(0, 0, 1) var index int64 = 0 for _, v := range Holiday { start, _ := time.Parse("2006-01-02", v["start"].(string)) end, _ := time.Parse("2006-01-02", v["end"].(string)) if (now.Before(start) && (addtime.After(end) || addtime.Equal(end))) || ((addtime.After(start) || addtime.Equal(start)) && (addtime.Before(end) || addtime.Equal(end))) { addtime = addtime.AddDate(0, 0, util.IntAll(v["count"])) //timeUnix = addtime.Unix() index = index + util.Int64All(v["count"]) } } finishtime = finishtime + index*86400 return finishtime } //6小时 10:30-12:00导入 func sixAfterTenthirty(time_dvalue int64) int64 { finishtime = time_eight_thirty + 86400 + 5400 - time_dvalue finishtime = getDay(finishtime) //finishtime = ioExcel(finishtime) return finishtime } //6小时 13:30-15:30导入 func sixBeforeFitteenthirty(time_dvalue int64) int64 { finishtime = time_twelve + 86400 - time_dvalue finishtime = getDay(finishtime) //finishtime = ioExcel(finishtime) return finishtime } //6小时 15:30-18:00导入 func sixAfterFitteenthirty(time_dvalue int64) int64 { finishtime = time_thirteen_thirty + 86400 + time_dvalue finishtime = getDay(finishtime) //finishtime = ioExcel(finishtime) return finishtime } func getDays(days int) int64 { var timeUnix int64 now := time.Now() addtime := now.AddDate(0, 0, days) for _, v := range Holiday { start, _ := time.Parse("2006-01-02", v["start"].(string)) end, _ := time.Parse("2006-01-02", v["end"].(string)) if (now.Before(start) && (addtime.After(end) || addtime.Equal(end))) || ((addtime.After(start) || addtime.Equal(start)) && (addtime.Before(end) || addtime.Equal(end))) { addtime = addtime.AddDate(0, 0, util.IntAll(v["count"])) timeUnix = addtime.Unix() } else { timeUnix = addtime.Unix() } } return timeUnix } //验证法定节假日 func ioExcel(finishtime int64) int64 { finishdate = time.Unix(finishtime, 0).Format("2006-01-02") var index int64 = 0 var finishtimed int64 ex, err := xlsx.OpenFile("dayOff.xlsx") if err == nil { sheet := ex.Sheets[0] rows := sheet.Rows for _, v := range rows { cols := v.Cells[0].Value if cols == finishdate { index = index + 1 finishtimed = finishtime + 86400*index finishdate = time.Unix(finishtimed, 0).Format("2006-01-02") } } } finishtime = finishtime + index*86400 //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05") return finishtime }