time_range.go 871 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package tsdb
  2. import (
  3. "fmt"
  4. "strings"
  5. "time"
  6. )
  7. func NewTimerange(from, to string) TimeRange {
  8. return TimeRange{
  9. From: from,
  10. To: to,
  11. Now: time.Now(),
  12. }
  13. }
  14. type TimeRange struct {
  15. From string
  16. To string
  17. Now time.Time
  18. }
  19. func (tr TimeRange) FromTime() (time.Time, error) {
  20. fromRaw := strings.Replace(tr.From, "now-", "", 1)
  21. diff, err := time.ParseDuration("-" + fromRaw)
  22. if err != nil {
  23. return time.Time{}, err
  24. }
  25. return tr.Now.Add(diff), nil
  26. }
  27. func (tr TimeRange) ToTime() (time.Time, error) {
  28. if tr.To == "now" {
  29. return tr.Now, nil
  30. } else if strings.HasPrefix(tr.To, "now-") {
  31. withoutNow := strings.Replace(tr.To, "now-", "", 1)
  32. diff, err := time.ParseDuration("-" + withoutNow)
  33. if err != nil {
  34. return time.Time{}, nil
  35. }
  36. return tr.Now.Add(diff), nil
  37. }
  38. return time.Time{}, fmt.Errorf("cannot parse to value %s", tr.To)
  39. }