You could do this
dd<-data.frame(
id = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 5L),
var1 = c(120L, 120L, 120L, 220L, 220L, 120L, 120L, 120L, 220L),
var2 = c(1L, 1L, 4L, 1L, 1L, 2L, 2L, 1L, 3L),
date1 = structure(c(16224, 16225, 16226, 16226, 16228, 16231, 16233, 16236, 16241), class = "Date"),
date2 = structure(c(16251, 16251, 16251, 16251, 16251, 16251, 16251, 16251, 16251), class = "Date")
)
last.date1<-with(dd, ave(date1, id, var1, var2, FUN=max, drop=T))
dd$date2-last.date1
dd$diff_time <- dd$date2-last.date1