本文共 3830 字,大约阅读时间需要 12 分钟。
import ( "fmt" "log" "time")var WeekDayMap = map[string]int64{ "Monday": 1, "Tuesday": 2, "Wednesday": 3, "Thursday": 4, "Friday": 5, "Saturday": 6, "Sunday": 7,}// 获取输入的两个日期分别是星期几func GetWeekDay(startime, endtim string) (int64, int64) { startday, _ := time.Parse("2006-01-02", startime) endday, _ := time.Parse("2006-01-02", endtim) staweek_int := startday.Weekday().String() endweek_int := endday.Weekday().String() return WeekDayMap[staweek_int], WeekDayMap[endweek_int]}// 字符串转时间戳func StringToTimeStamp(strTime string) int64 { timeLayout := "2006-01-02" //timeLayout := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") the_time, err := time.ParseInLocation(timeLayout, strTime, loc) if err != nil { log.Println("StringToTimeStamp出现异常:", err) } unix_time := the_time.Unix() return unix_time}// 时间戳转 字符串func TimeStampToString(timeStp int64) string { //转化所需模板 //timeLayout := "2006-01-02 15:04:05" timeLayout := "2006-01-02" //进行格式化 datetime := time.Unix(timeStp, 0).Format(timeLayout) return datetime}// 时间转化为周日期列表func ChangeToWeek(startime, endtim string) []map[string]string { staweek_int, endweek_int := GetWeekDay(startime, endtim) // 获取时间戳 start_stamp := StringToTimeStamp(startime) end_stamp := StringToTimeStamp(endtim) fmt.Println("start_stamp==",start_stamp,"end_stamp==", end_stamp) var week_list = make([]map[string]string, 0) if (end_stamp-start_stamp)/604800 <= 1 && endweek_int-staweek_int >= 0 { if end_stamp-start_stamp < 604800 && endweek_int-staweek_int > 0 { one_map := map[string]string{ } mon_one := TimeStampToString(start_stamp - (staweek_int-1)*86400) sun_one := TimeStampToString(start_stamp + (7-staweek_int)*86400) one_map["mon"] = mon_one one_map["sun"] = sun_one week_list = append(week_list, one_map) return week_list } one_map := map[string]string{ } mon_one := TimeStampToString(start_stamp - (staweek_int-1)*86400) sun_one := TimeStampToString(start_stamp + (7-staweek_int)*86400) one_map["mon"] = mon_one one_map["sun"] = sun_one week_list = append(week_list, one_map) tow_map := map[string]string{ } mon_tow := TimeStampToString(end_stamp - (endweek_int-1)*86400) sun_tow := TimeStampToString(end_stamp + (7-endweek_int)*86400) tow_map["mon"] = mon_tow tow_map["sun"] = sun_tow week_list = append(week_list, tow_map) return week_list } week_n := (end_stamp - start_stamp) / 604800 one_map := map[string]string{ } mon_one := TimeStampToString(start_stamp - (staweek_int-1)*86400) sun_one := TimeStampToString(start_stamp + (7-staweek_int)*86400) one_map["mon"] = mon_one one_map["sun"] = sun_one week_list = append(week_list, one_map) for i := 1; i <= int(week_n); i++ { week_map := map[string]string{ } mon_day := TimeStampToString(start_stamp - (staweek_int-1)*86400 + int64(i)*604800) sun_day := TimeStampToString(start_stamp + (7-staweek_int)*86400 + int64(i)*604800) week_map["mon"] = mon_day week_map["sun"] = sun_day week_list = append(week_list, week_map) } if endweek_int-staweek_int >= 0 { return week_list } tow_map := map[string]string{ } mon_tow := TimeStampToString(end_stamp - (endweek_int-1)*86400) sun_tow := TimeStampToString(end_stamp + (7-endweek_int)*86400) tow_map["mon"] = mon_tow tow_map["sun"] = sun_tow week_list = append(week_list, tow_map) return week_list}func main(){ fmt.Println(ChangeToWeek("2020-01-01","2020-01-28"))}// 结果://start_stamp== 1577808000 end_stamp== 1580140800//[ map[mon:2019-12-30 sun:2020-01-05]// map[mon:2020-01-06 sun:2020-01-12] // map[mon:2020-01-13 sun:2020-01-19] // map[mon:2020-01-20 sun:2020-01-26] // map[mon:2020-01-27 sun:2020-02-02] ]
转载地址:http://knqxi.baihongyu.com/