date.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package common
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/os/gtime"
  5. )
  6. /*
  7. GetCNStartOfWeek
  8. 获取国内意义上一周的第一天(周一) 外国认为是周日
  9. */
  10. func GetCNStartOfWeek(time *gtime.Time) *gtime.Time {
  11. day := int(time.Weekday())
  12. if day == 0 {
  13. return time.AddDate(0, 0, -6)
  14. } else {
  15. return time.AddDate(0, 0, -day+1)
  16. }
  17. }
  18. /*
  19. GetCNEndOfWeek
  20. 获取国内意义上一周的第七天(周日) 外国认为是周六
  21. */
  22. func GetCNEndOfWeek(time *gtime.Time) *gtime.Time {
  23. day := int(time.Weekday())
  24. if day == 0 {
  25. return time.AddDate(0, 0, 0).EndOfDay()
  26. } else {
  27. return time.AddDate(0, 0, 7-day).EndOfDay()
  28. }
  29. }
  30. // GetCNWeekday 返回数字类型的周信息(1,2,3,4,5,6,7)
  31. func GetCNWeekday(time *gtime.Time) int {
  32. day := int(time.Weekday())
  33. if day == 0 {
  34. return 7
  35. } else {
  36. return day
  37. }
  38. }
  39. // GetNextTimeNode 获取当前时间的下一个预约节点
  40. func GetNextTimeNode(signOutTime *gtime.Time) *gtime.Time {
  41. currentMinute := signOutTime.Minute()
  42. if currentMinute >= 30 {
  43. nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
  44. signOutTime.Year(), int(signOutTime.Month()), signOutTime.Day(),
  45. signOutTime.Hour()+1, 0, 0)
  46. return gtime.NewFromStr(nextTimeStr)
  47. }
  48. nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
  49. signOutTime.Year(), int(signOutTime.Month()), signOutTime.Day(),
  50. signOutTime.Hour(), 30, 0)
  51. return gtime.NewFromStr(nextTimeStr)
  52. }