golang获取当前时间是第几周


本文摘自php中文网,作者尚,侵删。

Go语言中使用import关键字导入包,包的名字使用双引号("")包裹起来。

golang判断当前时间是第几周:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

func main() {

 

    l, _ := time.LoadLocation("Asia/Shanghai")

    startTime,_ := time.ParseInLocation("2006-01-02", "2018-12-22", l)

    endTime,_ := time.ParseInLocation("2006-01-02", "2019-05-17", l)

 

    datas := GroupByWeekDate(startTime, endTime)

    for _, d := range datas {

        fmt.Println(d)

    }

 

}

 

//判断时间是当年的第几周

func WeekByDate(t time.Time) string {

    yearDay := t.YearDay()

    yearFirstDay := t.AddDate(0, 0, -yearDay+1)

    firstDayInWeek := int(yearFirstDay.Weekday())

 

    //今年第一周有几天

    firstWeekDays := 1

    if firstDayInWeek != 0 {

        firstWeekDays = 7 - firstDayInWeek + 1

    }

    var week int

    if yearDay <= firstWeekDays {

        week =  1

    } else {

        week = (yearDay-firstWeekDays)/7 + 2

    }

    return fmt.Sprintf("%d第%d周", t.Year(), week)

}

 

type WeekDate struct {

    WeekTh    string

    StartTime time.Time

    EndTime   time.Time

}

 

// 将开始时间和结束时间分割为周为单位

func GroupByWeekDate(startTime, endTime time.Time) []WeekDate {

    weekDate := make([]WeekDate, 0)

    diffDuration := endTime.Sub(startTime)

    days := int(math.Ceil(float64(diffDuration / (time.Hour * 24))))+1

 

    currentWeekDate := WeekDate{}

    currentWeekDate.WeekTh = WeekByDate(endTime)

    currentWeekDate.EndTime = endTime

    currentWeekDay := int(endTime.Weekday())

    if currentWeekDay == 0 {

        currentWeekDay = 7

    }

    currentWeekDate.StartTime = endTime.AddDate(0, 0, -currentWeekDay+1)

    nextWeekEndTime := currentWeekDate.StartTime

    weekDate = append(weekDate, currentWeekDate)

 

    for i := 0; i < (days-currentWeekDay)/7; i++ {

        weekData := WeekDate{}

        weekData.EndTime = nextWeekEndTime

        weekData.StartTime = nextWeekEndTime.AddDate(0, 0, -7)

        weekData.WeekTh = WeekByDate(weekData.StartTime)

        nextWeekEndTime = weekData.StartTime

        weekDate = append(weekDate, weekData)

    }

 

    if lastDays := (days - currentWeekDay) % 7; lastDays > 0 {

        lastData := WeekDate{}

        lastData.EndTime = nextWeekEndTime

        lastData.StartTime = nextWeekEndTime.AddDate(0, 0, - lastDays)

        lastData.WeekTh = WeekByDate(lastData.StartTime)

        weekDate = append(weekDate, lastData)

    }

 

    return weekDate

}

结果:

阅读剩余部分

相关阅读 >>

golang文件复制

【gocn酷go推荐】html解析利器-goquery库

[译]pkg.go.dev的未来规划

golang 哪个 web 框架好用?

go module 引入本地包的问题

使用bklexer进行词法分析

go中sync.mutex源码解读

golang如何定义一个二维数组

手撸golang 行为型设计模式 模板方法模式

一周 go world 新鲜事

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...