| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package common
- import (
- "fmt"
- "time"
- "github.com/gogf/gf/os/gtime"
- )
- /*
- GetCNStartOfWeek
- 获取国内意义上一周的第一天(周一) 外国认为是周日
- */
- func GetCNStartOfWeek(time *gtime.Time) *gtime.Time {
- day := int(time.Weekday())
- if day == 0 {
- return time.AddDate(0, 0, -6)
- } else {
- return time.AddDate(0, 0, -day+1)
- }
- }
- /*
- GetCNEndOfWeek
- 获取国内意义上一周的第七天(周日) 外国认为是周六
- */
- func GetCNEndOfWeek(time *gtime.Time) *gtime.Time {
- day := int(time.Weekday())
- if day == 0 {
- return time.AddDate(0, 0, 0).EndOfDay()
- } else {
- return time.AddDate(0, 0, 7-day).EndOfDay()
- }
- }
- // GetCNWeekday 返回数字类型的周信息(1,2,3,4,5,6,7)
- func GetCNWeekday(time *gtime.Time) int {
- day := int(time.Weekday())
- if day == 0 {
- return 7
- } else {
- return day
- }
- }
- // GetNextTimeNode 获取当前时间的下一个预约节点
- func GetNextTimeNode(signOutTime *gtime.Time) *gtime.Time {
- currentMinute := signOutTime.Minute()
- // 当分钟为00或者30的时候直接返回
- if currentMinute == 30 && signOutTime.Second() == 0 || currentMinute == 0 && signOutTime.Second() == 0 {
- return signOutTime
- }
- if currentMinute >= 30 {
- nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
- signOutTime.Year(), signOutTime.Month(), signOutTime.Day(),
- signOutTime.Hour()+1, 0, 0)
- return gtime.NewFromStr(nextTimeStr)
- }
- nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
- signOutTime.Year(), signOutTime.Month(), signOutTime.Day(),
- signOutTime.Hour(), 30, 0)
- return gtime.NewFromStr(nextTimeStr)
- }
- func SliceIntcontains(s []int, ele int) bool {
- for _, i := range s {
- if i == ele {
- return true
- }
- }
- return false
- }
- func Weekday(t time.Time) []time.Time {
- year, month, day := t.Date()
- var begin time.Time
- if weekday := t.Weekday(); weekday == 0 {
- begin = time.Date(year, month, day-6, 0, 0, 0, 0, t.Location())
- } else {
- begin = time.Date(year, month, day-int(weekday)+1, 0, 0, 0, 0, t.Location())
- }
- ret := []time.Time{}
- for i := 0; i < 7; i++ {
- ret = append(ret, begin.Add(time.Hour*24*time.Duration(i)))
- }
- return ret
- }
|