diff --git a/kernel/av/filter.go b/kernel/av/filter.go index f830f4a8e..632fd856d 100644 --- a/kernel/av/filter.go +++ b/kernel/av/filter.go @@ -248,7 +248,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa direction := relativeDate.Direction relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction) _, relativeTimeEnd2 := calcRelativeTimeRegion(relativeDate2.Count, relativeDate2.Unit, relativeDate2.Direction) - return filterTime(value.Date.Content, value.Date.IsNotEmpty, relativeTimeStart, relativeTimeEnd, relativeTimeEnd2, operator) + return filterRelativeTime(value.Date.Content, value.Date.IsNotEmpty, relativeTimeStart, relativeTimeEnd, relativeTimeEnd2, operator) } else { // 使用具体时间比较 if nil == other.Date { return true @@ -257,7 +257,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa otherTime := time.UnixMilli(other.Date.Content) otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location()) otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location()) - return filterTime(value.Date.Content, value.Date.IsNotEmpty, otherStart, otherEnd, time.Now(), operator) + return filterTime(value.Date.Content, value.Date.IsNotEmpty, otherStart, otherEnd, operator) } } case KeyTypeCreated: @@ -269,7 +269,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa unit := relativeDate.Unit direction := relativeDate.Direction relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction) - return filterTime(value.Created.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator) + return filterRelativeTime(value.Created.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator) } else { // 使用具体时间比较 if nil == other.Created { return true @@ -278,7 +278,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa otherTime := time.UnixMilli(other.Created.Content) otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location()) otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location()) - return filterTime(value.Created.Content, value.Created.IsNotEmpty, otherStart, otherEnd, time.Now(), operator) + return filterTime(value.Created.Content, value.Created.IsNotEmpty, otherStart, otherEnd, operator) } } case KeyTypeUpdated: @@ -290,7 +290,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa unit := relativeDate.Unit direction := relativeDate.Direction relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction) - return filterTime(value.Updated.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator) + return filterRelativeTime(value.Updated.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator) } else { // 使用具体时间比较 if nil == other.Updated { return true @@ -299,7 +299,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa otherTime := time.UnixMilli(other.Updated.Content) otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location()) otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location()) - return filterTime(value.Updated.Content, value.Updated.IsNotEmpty, otherStart, otherEnd, time.Now(), operator) + return filterTime(value.Updated.Content, value.Updated.IsNotEmpty, otherStart, otherEnd, operator) } } case KeyTypeSelect, KeyTypeMSelect: @@ -520,7 +520,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa return false } -func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd, otherValueEnd2 time.Time, operator FilterOperator) bool { +func filterRelativeTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd, otherValueEnd2 time.Time, operator FilterOperator) bool { valueTime := time.UnixMilli(valueMills) switch operator { case FilterOperatorIsEqual: @@ -545,6 +545,31 @@ func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherVa return false } +func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd time.Time, operator FilterOperator) bool { + valueTime := time.UnixMilli(valueMills) + switch operator { + case FilterOperatorIsEqual: + return (valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)) && valueTime.Before(otherValueEnd) + case FilterOperatorIsNotEqual: + return valueTime.Before(otherValueStart) || valueTime.After(otherValueEnd) + case FilterOperatorIsGreater: + return valueTime.After(otherValueEnd) || valueTime.Equal(otherValueEnd) + case FilterOperatorIsGreaterOrEqual: + return valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart) + case FilterOperatorIsLess: + return valueTime.Before(otherValueStart) + case FilterOperatorIsLessOrEqual: + return valueTime.Before(otherValueEnd) || valueTime.Equal(otherValueEnd) + case FilterOperatorIsBetween: + return (valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)) && (valueTime.Before(otherValueEnd) || valueTime.Equal(otherValueEnd)) + case FilterOperatorIsEmpty: + return !valueIsNotEmpty + case FilterOperatorIsNotEmpty: + return valueIsNotEmpty + } + return false +} + // 根据 Count、Unit 和 Direction 计算相对当前时间的开始时间和结束时间 func calcRelativeTimeRegion(count int, unit RelativeDateUnit, direction RelativeDateDirection) (start, end time.Time) { now := time.Now()