github.com/kubeshop/testkube@v1.17.23/pkg/datefilter/filter.go (about)

     1  package datefilter
     2  
     3  import "time"
     4  
     5  const DateFormatISO8601 string = "2006-01-02"
     6  
     7  // DateFilter is used to filter dates
     8  type DateFilter struct {
     9  	Start        time.Time
    10  	End          time.Time
    11  	IsStartValid bool
    12  	IsEndValid   bool
    13  }
    14  
    15  // NewDateFilter creates new DateFilter with the start date and end date
    16  func NewDateFilter(startDate string, endDate string) DateFilter {
    17  	var err error
    18  
    19  	dFilter := DateFilter{}
    20  	dFilter.Start, err = time.Parse(DateFormatISO8601, startDate)
    21  	dFilter.IsStartValid = (err == nil)
    22  	dFilter.End, err = time.Parse(DateFormatISO8601, endDate)
    23  	dFilter.IsEndValid = err == nil
    24  
    25  	return dFilter
    26  }
    27  
    28  // IsPassing tests if a specific date is passing the filter
    29  func (dFilter DateFilter) IsPassing(date time.Time) bool {
    30  	if !dFilter.IsStartValid {
    31  		return true
    32  	}
    33  	oneDay := 24 * time.Hour
    34  	if dFilter.Start.Before(date) || dFilter.Start.Equal(date.Truncate(oneDay)) {
    35  		if !dFilter.IsEndValid {
    36  			return true
    37  		}
    38  		if dFilter.End.After(date) || dFilter.End.Equal(date.Truncate(oneDay)) {
    39  			return true
    40  		}
    41  	}
    42  	return false
    43  }