Dates and Time Series
Date Offsets
Adding Days
Date values support arithmetic. Adding an integer to a Date moves it forward by that many days.
Program
Play the script to choose the offset and watch the due date update.
date_offsets.R
Replay: real traced execution (multi-file project)
start <- as.Date("2026-01-15")
offset_days <- 7
due <- start + offset_days
elapsed <- as.integer(due - start)
label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")
cat(label, "\n", sep = "")
start <- as.Date("2026-01-15")
offset_days <- 3
due <- start + offset_days
elapsed <- as.integer(due - start)
label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")
cat(label, "\n", sep = "")
start <- as.Date("2026-01-15")
offset_days <- 14
due <- start + offset_days
elapsed <- as.integer(due - start)
label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")
cat(label, "\n", sep = "")
start ← 2026-01-15
1start <- as.Date("2026-01-15")2offset_days <- 7values this step2026-01-15startoffset_days ← 7
1start <- as.Date("2026-01-15")2offset_days <- 73due <- start + offset_daysvalues this step7offset_daysdue ← 2026-01-22
2offset_days <- 73due <- start + offset_days4elapsed <- as.integer(due - start)values this step2026-01-22due2026-01-15start7offset_dayselapsed ← 7
3due <- start + offset_days4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")values this step7elapsed7 daysdue - startlabel ← 2026-01-22:7
4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")values this step2026-01-22:7label2026-01-22due7elapsedcat(label, " ", sep = "")
5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")output2026-01-22:7values this step2026-01-22:7label
start ← 2026-01-15
1start <- as.Date("2026-01-15")2offset_days <- 3values this step2026-01-15startoffset_days ← 3
1start <- as.Date("2026-01-15")2offset_days <- 33due <- start + offset_daysvalues this step3offset_daysdue ← 2026-01-18
2offset_days <- 33due <- start + offset_days4elapsed <- as.integer(due - start)values this step2026-01-18due2026-01-15start3offset_dayselapsed ← 3
3due <- start + offset_days4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")values this step3elapsed3 daysdue - startlabel ← 2026-01-18:3
4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")values this step2026-01-18:3label2026-01-18due3elapsedcat(label, " ", sep = "")
5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")output2026-01-18:3values this step2026-01-18:3label
start ← 2026-01-15
1start <- as.Date("2026-01-15")2offset_days <- 14values this step2026-01-15startoffset_days ← 14
1start <- as.Date("2026-01-15")2offset_days <- 143due <- start + offset_daysvalues this step14offset_daysdue ← 2026-01-29
2offset_days <- 143due <- start + offset_days4elapsed <- as.integer(due - start)values this step2026-01-29due2026-01-15start14offset_dayselapsed ← 14
3due <- start + offset_days4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")values this step14elapsed14 daysdue - startlabel ← 2026-01-29:14
4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")values this step2026-01-29:14label2026-01-29due14elapsedcat(label, " ", sep = "")
5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")output2026-01-29:14values this step2026-01-29:14label
Date
`as.Date("2026-01-15")` creates a calendar date value.
date arithmetic
`start + offset_days` moves forward by whole days.
difftime
`due - start` computes the elapsed interval between dates.