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.

offset_days
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 = "")
  1. start ← 2026-01-15

    1start <- as.Date("2026-01-15")2offset_days <- 7
    values this step2026-01-15start
  2. offset_days ← 7

    1start <- as.Date("2026-01-15")2offset_days <- 73due <- start + offset_days
    values this step7offset_days
  3. due ← 2026-01-22

    2offset_days <- 73due <- start + offset_days4elapsed <- as.integer(due - start)
    values this step2026-01-22due2026-01-15start7offset_days
  4. elapsed ← 7

    3due <- start + offset_days4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")
    values this step7elapsed7 daysdue - start
  5. label ← 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-22due7elapsed
  6. cat(label, " ", sep = "")

    5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")
    output2026-01-22:7
    values this step2026-01-22:7label
  1. start ← 2026-01-15

    1start <- as.Date("2026-01-15")2offset_days <- 3
    values this step2026-01-15start
  2. offset_days ← 3

    1start <- as.Date("2026-01-15")2offset_days <- 33due <- start + offset_days
    values this step3offset_days
  3. due ← 2026-01-18

    2offset_days <- 33due <- start + offset_days4elapsed <- as.integer(due - start)
    values this step2026-01-18due2026-01-15start3offset_days
  4. elapsed ← 3

    3due <- start + offset_days4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")
    values this step3elapsed3 daysdue - start
  5. label ← 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-18due3elapsed
  6. cat(label, " ", sep = "")

    5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")
    output2026-01-18:3
    values this step2026-01-18:3label
  1. start ← 2026-01-15

    1start <- as.Date("2026-01-15")2offset_days <- 14
    values this step2026-01-15start
  2. offset_days ← 14

    1start <- as.Date("2026-01-15")2offset_days <- 143due <- start + offset_days
    values this step14offset_days
  3. due ← 2026-01-29

    2offset_days <- 143due <- start + offset_days4elapsed <- as.integer(due - start)
    values this step2026-01-29due2026-01-15start14offset_days
  4. elapsed ← 14

    3due <- start + offset_days4elapsed <- as.integer(due - start)5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")
    values this step14elapsed14 daysdue - start
  5. label ← 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-29due14elapsed
  6. cat(label, " ", sep = "")

    5label <- paste(format(due, "%Y-%m-%d"), elapsed, sep = ":")6cat(label, "\n", sep = "")
    output2026-01-29:14
    values 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.