weekday.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package main
  2. import (
  3. "log"
  4. "time"
  5. )
  6. var WeekDayMap = map[string]int64{
  7. "Monday": 1,
  8. "Tuesday": 2,
  9. "Wednesday": 3,
  10. "Thursday": 4,
  11. "Friday": 5,
  12. "Saturday": 6,
  13. "Sunday": 7,
  14. }
  15. // 获取输入日期分别是星期几
  16. func GetOneWeekDay(startime string) (int64) {
  17. startday, _ := time.Parse("2006-01-02", startime)
  18. staweek_int := startday.Weekday().String()
  19. return WeekDayMap[staweek_int]
  20. }
  21. // 获取输入的两个日期分别是星期几
  22. func GetWeekDay(startime, endtim string) (int64, int64) {
  23. startday, _ := time.Parse("2006-01-02", startime)
  24. endday, _ := time.Parse("2006-01-02", endtim)
  25. staweek_int := startday.Weekday().String()
  26. endweek_int := endday.Weekday().String()
  27. return WeekDayMap[staweek_int], WeekDayMap[endweek_int]
  28. }
  29. // 字符串转时间戳
  30. func StringToTimeStamp(strTime string) int64 {
  31. timeLayout := "2006-01-02"
  32. //timeLayout := "2006-01-02 15:04:05"
  33. loc, _ := time.LoadLocation("Local")
  34. the_time, err := time.ParseInLocation(timeLayout, strTime, loc)
  35. if err != nil {
  36. log.Println("StringToTimeStamp出现异常:", err)
  37. }
  38. unix_time := the_time.Unix()
  39. return unix_time
  40. }
  41. // 时间戳转 字符串
  42. func TimeStampToString(timeStp int64) string {
  43. //转化所需模板
  44. //timeLayout := "2006-01-02 15:04:05"
  45. timeLayout := "2006-01-02"
  46. //进行格式化
  47. datetime := time.Unix(timeStp, 0).Format(timeLayout)
  48. return datetime
  49. }
  50. // 时间转化为周日期列表
  51. func ChangeToWeek(startime, endtim string) []map[string]string {
  52. staweek_int, endweek_int := GetWeekDay(startime, endtim)
  53. // 获取时间戳
  54. start_stamp := StringToTimeStamp(startime)
  55. end_stamp := StringToTimeStamp(endtim)
  56. log.Println("start_stamp==",start_stamp,"end_stamp==", end_stamp)
  57. var week_list = make([]map[string]string, 0)
  58. if (end_stamp-start_stamp)/604800 <= 1 && endweek_int-staweek_int >= 0 {
  59. if end_stamp-start_stamp < 604800 && endweek_int-staweek_int > 0 {
  60. one_map := map[string]string{}
  61. mon_one := TimeStampToString(start_stamp - (staweek_int-1)*86400)
  62. sun_one := TimeStampToString(start_stamp + (7-staweek_int)*86400)
  63. one_map["mon"] = mon_one
  64. one_map["sun"] = sun_one
  65. week_list = append(week_list, one_map)
  66. return week_list
  67. }
  68. one_map := map[string]string{}
  69. mon_one := TimeStampToString(start_stamp - (staweek_int-1)*86400)
  70. sun_one := TimeStampToString(start_stamp + (7-staweek_int)*86400)
  71. one_map["mon"] = mon_one
  72. one_map["sun"] = sun_one
  73. week_list = append(week_list, one_map)
  74. tow_map := map[string]string{}
  75. mon_tow := TimeStampToString(end_stamp - (endweek_int-1)*86400)
  76. sun_tow := TimeStampToString(end_stamp + (7-endweek_int)*86400)
  77. tow_map["mon"] = mon_tow
  78. tow_map["sun"] = sun_tow
  79. week_list = append(week_list, tow_map)
  80. return week_list
  81. }
  82. week_n := (end_stamp - start_stamp) / 604800
  83. one_map := map[string]string{}
  84. mon_one := TimeStampToString(start_stamp - (staweek_int-1)*86400)
  85. sun_one := TimeStampToString(start_stamp + (7-staweek_int)*86400)
  86. one_map["mon"] = mon_one
  87. one_map["sun"] = sun_one
  88. week_list = append(week_list, one_map)
  89. for i := 1; i <= int(week_n); i++ {
  90. week_map := map[string]string{}
  91. mon_day := TimeStampToString(start_stamp - (staweek_int-1)*86400 + int64(i)*604800)
  92. sun_day := TimeStampToString(start_stamp + (7-staweek_int)*86400 + int64(i)*604800)
  93. week_map["mon"] = mon_day
  94. week_map["sun"] = sun_day
  95. week_list = append(week_list, week_map)
  96. }
  97. if endweek_int-staweek_int >= 0 {
  98. return week_list
  99. }
  100. tow_map := map[string]string{}
  101. mon_tow := TimeStampToString(end_stamp - (endweek_int-1)*86400)
  102. sun_tow := TimeStampToString(end_stamp + (7-endweek_int)*86400)
  103. tow_map["mon"] = mon_tow
  104. tow_map["sun"] = sun_tow
  105. week_list = append(week_list, tow_map)
  106. return week_list
  107. }