gitee.com/h79/goutils@v1.22.10/common/range.go (about)

     1  package common
     2  
     3  import "time"
     4  
     5  // Range 范围
     6  type Range[T IntegerType] struct {
     7  	Op  string // "GT","GTE","LT","LTE","BET"
     8  	Min T
     9  	Max T
    10  }
    11  
    12  func (rg *Range[T]) HasValid() bool {
    13  	// 时间有效,操作符长度不能太长,太长就是无效,在进行ToUpper时,造成时间消耗
    14  	return len(rg.Op) > 0 && len(rg.Op) < 5
    15  }
    16  
    17  func (rg *Range[T]) Adjust() {
    18  	if rg.Max < rg.Min {
    19  		rg.Min, rg.Max = rg.Max, rg.Min
    20  	}
    21  }
    22  
    23  func (rg *Range[T]) Legal(legal T) {
    24  	rg.Adjust()
    25  	if rg.Max-rg.Min <= legal {
    26  		return
    27  	}
    28  	rg.Min = rg.Max - legal
    29  }
    30  
    31  func (rg *Range[T]) Month(month time.Duration, unit int) T {
    32  	return rg.At(time.Hour*24*30*month, unit)
    33  }
    34  
    35  func (rg *Range[T]) Day(day time.Duration, unit int) T {
    36  	return rg.At(time.Hour*24*day, unit)
    37  }
    38  
    39  func (rg *Range[T]) At(at time.Duration, unit int) T {
    40  	end := T(at.Milliseconds())
    41  	if unit == 1 {
    42  		end = T(at.Seconds())
    43  	} else if unit == 2 {
    44  		end = T(at.Minutes())
    45  	} else if unit == 3 {
    46  		end = T(at.Hours())
    47  	}
    48  	return end
    49  }