Golang 封装根据时间间隔生成时间段集合方法(用于图表展示)

1904人浏览 2021-12-10

Golang 根据时间间隔生成时间段集合(用于图表展示)

备注:

ParseDuration解析一个时间段字符串。一个时间段字符串是一个序列,每个片段包含可选的正负号、 十进制数、可选的小数部分和单位后缀,如"300ms"、"-1.5h"、"2h45m"。 合法的单位有"ns"纳秒,"us","µs"、"ms"毫秒、"s"秒、"m"分钟、"h"

 

1.分割时间段用于图标X坐标。

// GetTimePeriodsX 分割时间段用于图标X坐标
// gap 应是加去的时间 如加十分钟:gap, _ := time.ParseDuration("10m")
func GetTimePeriodsX(begin, end time.Time, gap time.Duration) ([]string, error) {
	if begin.Unix() >= end.Unix() {
		return nil, errors.New("start time is greater than end time!")
	}
	//分割的时间段
	periods := make([]string, 0)
	for {
		str := begin.Format("15:04")
		periods = append(periods, str)
		begin = begin.Add(gap)
		if begin.Unix() > end.Unix() {
			break
		}
	}
	return periods, nil
}

调用:

//时间段间隔
	gap, _ := time.ParseDuration("10m")

	hour, _ := time.ParseDuration(fmt.Sprintf("-%vh", 1))
	begin := time.Now().Add(hour)
	end := time.Now()
	res, e := GetTimePeriodsX(begin, end, gap)
	fmt.Println(e)
	for _, t := range res {
		fmt.Println(t)
	}

2.分割时间段用于数据库查询

// GetTimePeriodsDb 分割时间段用于数据库查询
// gap 应是加去的时间 如加十分钟:gap, _ := time.ParseDuration("10m")
func GetTimePeriodsDb(begin, end time.Time, gap time.Duration) ([]map[string]string, error) {
	if begin.Unix() >= end.Unix() {
		return nil, errors.New("start time is greater than end time!")
	}
	if (end.Unix() - begin.Unix()) <= int64(gap.Seconds()) {
		return nil, errors.New("gap time is greater than end time!")
	}

	//分割的时间段
	periods := make([]map[string]string, 0)
	for {
		t := make(map[string]string)
		t["begin"] = begin.Format("2006-01-02 15:04")
		begin = begin.Add(gap)
		t["end"] = begin.Format("2006-01-02 15:04")

		periods = append(periods, t)
		if begin.Unix() > end.Unix() {
			break
		}
	}
	return periods, nil
}

调用:

/时间段间隔
	gap, _ := time.ParseDuration("10m")

	hour, _ := time.ParseDuration(fmt.Sprintf("-%vh", 1))
	begin := time.Now().Add(hour)
	end := time.Now()
	res, e := GetTimePeriodsDb(begin, end, gap)
	fmt.Println(e)
	for _, t := range res {
		fmt.Println(t)
	}

结果:

 

 

推荐文章

GORM 自定义结构体关联的数据库表名称和自定义结构体字段对应的数据表字段名
2021-02-23
KChatRoom在线多人聊天室,项目是使用Websocket和Gin框架基于Golang开发的在线聊天室
2021-05-17
Gin框架下获取所有路由信息
2021-07-14
搜索文章