lubridate icon indicating copy to clipboard operation
lubridate copied to clipboard

Equal to == operator doesn't work as expected with lubridate intervals

Open jakemanger opened this issue 2 years ago • 3 comments

If you attempt to use an == check with lubridate intervals, it uses the interval duration, rather than the interval object itself.

Reading the docs for lubridate::interval, this doesn't seem like this should be the default behaviour. Shouldn't this act like comparing two time ranges?

library(lubridate)
> interval(start=ymd('2018-01-01'), end=ymd('2018-01-02')) == interval(start=ymd('2018-01-02'), end=ymd('2018-01-02')) 
[1] FALSE
> interval(start=ymd('2018-01-01'), end=ymd('2018-01-02')) == interval(start=ymd('2018-01-03'), end=ymd('2018-01-04')) 
[1] TRUE

Note, I am using lubridate 1.9.2

jakemanger avatar Sep 26 '23 08:09 jakemanger

Agreed. Intervals are not exactly comparable, so comparison operations don't make sense and == is a special case of those.

Two options, either implement comparison operations as a partial order or, alternatively, error on all comparisons.

vspinu avatar Sep 27 '23 19:09 vspinu

@vspinu I believe the comparison as a partial order approach would be much more useful (at least for me). I've implemented a proposed solution here #1136

jakemanger avatar Sep 28 '23 02:09 jakemanger