Вопрос недостаточно четко определен для случая, когда даты колеблются в конце февраля, и один год является високосным, а если нет, то, игнорируя это, мы можем заменить год в каждой дате високосным годом, если любая из них являетсяв противном случае високосный год (2000 год) и не високосный год (1999 год), а затем вычтите:
library(lubridate)
d1 <- "2008-12-15"
d2 <- "2018-12-16"
yr <- 1999 + (leap_year(as.Date(d1)) || leap_year(as.Date(d2)))
as.Date(sub("....", yr, d1)) - as.Date(sub("....", yr, d2))
## Time difference of -1 days
ДОБАВЛЕНО
В комментарии автор указал, что мы можем игнорировать возникшие проблемывисокосными годами.В этом случае мы можем просто выбрать високосный год в качестве даты для замены, чтобы он всегда возвращал ответ.Мы делаем это ниже.Нам больше не нужно использовать lubridate для проверки того, являются ли даты високосными годами.
as.Date(sub("....", 2000, d1)) - as.Date(sub("....", 2000, d2))
## Time difference of -1 days
(С другой стороны, мы могли бы выбрать год, который не является високосным, и, поскольку большинство лет не являются високосными, это более вероятноне будьте одного выходного дня для дат с трансграничными датами, однако это будет ценой провала, если одна из дат будет 29 февраля.)