gtime.go 670 B

12345678910111213141516171819202122232425262728
  1. package gtime
  2. import (
  3. "regexp"
  4. "strconv"
  5. "time"
  6. )
  7. // ParseInterval parses and interval with support for all units that Grafana uses.
  8. func ParseInterval(interval string) (time.Duration, error) {
  9. re := regexp.MustCompile(`(\d+)([wdy])`)
  10. result := re.FindSubmatch([]byte(interval))
  11. if len(result) == 3 {
  12. num, _ := strconv.Atoi(string(result[1]))
  13. period := string(result[2])
  14. if period == `d` {
  15. return time.Hour * 24 * time.Duration(num), nil
  16. } else if period == `w` {
  17. return time.Hour * 24 * 7 * time.Duration(num), nil
  18. } else {
  19. return time.Hour * 24 * 7 * 365 * time.Duration(num), nil
  20. }
  21. } else {
  22. return time.ParseDuration(interval)
  23. }
  24. }