gtime.go 667 B

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