date.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. // 当分钟为00或者30的时候直接返回
  43. if currentMinute == 30 && signOutTime.Second() == 0 || currentMinute == 0 && signOutTime.Second() == 0 {
  44. return signOutTime
  45. }
  46. if currentMinute >= 30 {
  47. nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
  48. signOutTime.Year(), signOutTime.Month(), signOutTime.Day(),
  49. signOutTime.Hour()+1, 0, 0)
  50. return gtime.NewFromStr(nextTimeStr)
  51. }
  52. nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
  53. signOutTime.Year(), signOutTime.Month(), signOutTime.Day(),
  54. signOutTime.Hour(), 30, 0)
  55. return gtime.NewFromStr(nextTimeStr)
  56. }