Мы можем применять as.POSIXct
, когда нужно учитывать время, а не as.Date
.
a <- as.POSIXct(c("2012-01-03 18:00:00", "2012-02-03 18:00:00"))
b <- as.POSIXct(c("2012-02-01 19:00:00", "2012-03-03 18:00:00"))
При преобразовании as.POSIXct
в numeric
получаем секунды; Доказательство:
as.POSIXct(as.numeric(a), origin="1970-01-01") # origin is mostly "1970-01-01"
# [1] "2012-01-03 18:00:00 CET" "2012-02-03 18:00:00 CET"
Таким образом, мы могли бы вычислить intersect
из a
и b
, взять range
и преобразовать его обратно as.POSIXct
, чтобы получить перекрытие.
as.POSIXct(range(intersect(as.numeric(a)[1]:as.numeric(a)[2],
as.numeric(b)[1]:as.numeric(b)[2])), origin="1970-01-01")
# [1] "2012-02-01 19:00:00 CET" "2012-02-03 18:00:00 CET"
Это также должно работать с вашей Overlap()
функцией (не тестировалась).