Это то, что вы имеете в виду? Вот пример с разницей в месяц:
t0 <- strptime('17/Nov/2010:08:04:21',format='%d/%b/%Y:%H:%M:%S')
t1 <- strptime('21/Jan/2011:13:11:04',format='%d/%b/%Y:%H:%M:%S')
seq.firsts <- seq.Date(as.Date(t0),as.Date(t1),by='month')
boundaries <- paste0(format(seq.firsts, "%Y-%m"),"-01")
Это дает вам границы месяца:
> boundaries
[1] "2010-11-01" "2010-12-01" "2011-01-01"
Но теперь вы должны привести их в порядок и выбросить любые до t0
, если они туда попали:
timelist <- c(t0,t1,boundaries)
ab <- sort( timelist[timelist >= t0] ) # adjust boundaries; throw out beyond t0 and t1
И теперь вы можете difftime
между каждой парой в этом списке:
> for (i in 1:(length(ab)-1)) { print(abs( difftime(ab[i],ab[i+1]) )) }
Time difference of 81.59102 days
Time difference of 30.04167 days
Time difference of 31 days
Или добавить единицы измерения:
> for (i in 1:(length(ab)-1)) { print(abs( difftime(ab[i],ab[i+1],units='hours') )) }
Time difference of 1958.184 hours
Time difference of 721 hours
Time difference of 744 hours