lubridate
lubridate copied to clipboard
Equal to == operator doesn't work as expected with lubridate intervals
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
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 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