date.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package common
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/gogf/gf/os/gtime"
  6. )
  7. /*
  8. GetCNStartOfWeek
  9. 获取国内意义上一周的第一天(周一) 外国认为是周日
  10. */
  11. func GetCNStartOfWeek(time *gtime.Time) *gtime.Time {
  12. day := int(time.Weekday())
  13. if day == 0 {
  14. return time.AddDate(0, 0, -6)
  15. } else {
  16. return time.AddDate(0, 0, -day+1)
  17. }
  18. }
  19. /*
  20. GetCNEndOfWeek
  21. 获取国内意义上一周的第七天(周日) 外国认为是周六
  22. */
  23. func GetCNEndOfWeek(time *gtime.Time) *gtime.Time {
  24. day := int(time.Weekday())
  25. if day == 0 {
  26. return time.AddDate(0, 0, 0).EndOfDay()
  27. } else {
  28. return time.AddDate(0, 0, 7-day).EndOfDay()
  29. }
  30. }
  31. // GetCNWeekday 返回数字类型的周信息(1,2,3,4,5,6,7)
  32. func GetCNWeekday(time *gtime.Time) int {
  33. day := int(time.Weekday())
  34. if day == 0 {
  35. return 7
  36. } else {
  37. return day
  38. }
  39. }
  40. // GetNextTimeNode 获取当前时间的下一个预约节点
  41. func GetNextTimeNode(signOutTime *gtime.Time) *gtime.Time {
  42. currentMinute := signOutTime.Minute()
  43. // 当分钟为00或者30的时候直接返回
  44. if currentMinute == 30 && signOutTime.Second() == 0 || currentMinute == 0 && signOutTime.Second() == 0 {
  45. return signOutTime
  46. }
  47. if currentMinute >= 30 {
  48. nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
  49. signOutTime.Year(), signOutTime.Month(), signOutTime.Day(),
  50. signOutTime.Hour()+1, 0, 0)
  51. return gtime.NewFromStr(nextTimeStr)
  52. }
  53. nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
  54. signOutTime.Year(), signOutTime.Month(), signOutTime.Day(),
  55. signOutTime.Hour(), 30, 0)
  56. return gtime.NewFromStr(nextTimeStr)
  57. }
  58. func SliceIntcontains(s []int, ele int) bool {
  59. for _, i := range s {
  60. if i == ele {
  61. return true
  62. }
  63. }
  64. return false
  65. }
  66. func Weekday(t time.Time) []time.Time {
  67. year, month, day := t.Date()
  68. var begin time.Time
  69. if weekday := t.Weekday(); weekday == 0 {
  70. begin = time.Date(year, month, day-6, 0, 0, 0, 0, t.Location())
  71. } else {
  72. begin = time.Date(year, month, day-int(weekday)+1, 0, 0, 0, 0, t.Location())
  73. }
  74. ret := []time.Time{}
  75. for i := 0; i < 7; i++ {
  76. ret = append(ret, begin.Add(time.Hour*24*time.Duration(i)))
  77. }
  78. return ret
  79. }