| diff_dates | R Documentation |
diff_dates computes the difference between two dates
(i.e., from some from_date to some to_date)
in human measurement units (periods).
diff_dates(
from_date,
to_date = Sys.Date(),
unit = "years",
as_character = TRUE
)
from_date |
From date (required, scalar or vector, as "Date"). Date of birth (DOB), assumed to be of class "Date", and coerced into "Date" when of class "POSIXt". |
to_date |
To date (optional, scalar or vector, as "Date").
Default: |
unit |
Largest measurement unit for representing results.
Units represent human time periods, rather than
chronological time differences.
Default:
Units may be abbreviated. |
as_character |
Boolean: Return output as character?
Default: |
diff_dates answers questions like
"How much time has elapsed between two dates?"
or "How old are you?" in human time periods
of (full) years, months, and days.
Key characteristics:
If to_date or from_date are not "Date" objects,
diff_dates aims to coerce them into "Date" objects.
If to_date is missing (i.e., NA),
to_date is set to today's date (i.e., Sys.Date()).
If to_date is specified, any intermittent missing values
(i.e., NA) are set to today's date (i.e., Sys.Date()).
Thus, dead people (with both birth dates and death dates specified)
do not age any further, but people still alive (with is.na(to_date),
are measured to today's date (i.e., Sys.Date()).
If to_date precedes from_date (i.e., from_date > to_date)
computations are performed on swapped days and
the result is marked as negative (by a character "-") in the output.
If the lengths of from_date and to_date differ,
the shorter vector is recycled to the length of the longer one.
By default, diff_dates provides output as (signed) character strings.
For numeric outputs, use as_character = FALSE.
A character vector or data frame (with dates, sign, and numeric columns for units).
Time spans (interval as.period) in the lubridate package.
Other date and time functions:
change_time(),
change_tz(),
cur_date(),
cur_time(),
days_in_month(),
diff_times(),
diff_tz(),
is_leap_year(),
what_date(),
what_month(),
what_time(),
what_wday(),
what_week(),
what_year(),
zodiac()
y_100 <- Sys.Date() - (100 * 365.25) + -1:1
diff_dates(y_100)
# with "to_date" argument:
y_050 <- Sys.Date() - (50 * 365.25) + -1:1
diff_dates(y_100, y_050)
diff_dates(y_100, y_050, unit = "d") # days (with decimals)
# Time unit and output format:
ds_from <- as.Date("2010-01-01") + 0:2
ds_to <- as.Date("2020-03-01") # (2020 is leap year)
diff_dates(ds_from, ds_to, unit = "y", as_character = FALSE) # years
diff_dates(ds_from, ds_to, unit = "m", as_character = FALSE) # months
diff_dates(ds_from, ds_to, unit = "d", as_character = FALSE) # days
# Robustness:
days_cur_year <- 365 + is_leap_year(Sys.Date())
diff_dates(Sys.time() - (1 * (60 * 60 * 24) * days_cur_year)) # for POSIXt times
diff_dates("10-08-11", "20-08-10") # for strings
diff_dates(20200228, 20200301) # for numbers (2020 is leap year)
# Recycling "to_date" to length of "from_date":
y_050_2 <- Sys.Date() - (50 * 365.25)
diff_dates(y_100, y_050_2)
# Note maxima and minima:
diff_dates("0000-01-01", "9999-12-31") # max. d + m + y
diff_dates("1000-06-01", "1000-06-01") # min. d + m + y
# If from_date == to_date:
diff_dates("2000-01-01", "2000-01-01")
# If from_date > to_date:
diff_dates("2000-01-02", "2000-01-01") # Note negation "-"
diff_dates("2000-02-01", "2000-01-01", as_character = TRUE)
diff_dates("2001-02-02", "2000-02-02", as_character = FALSE)
# Test random date samples:
f_d <- sample_date(size = 10)
t_d <- sample_date(size = 10)
diff_dates(f_d, t_d, as_character = TRUE)
# Using 'fame' data:
dob <- as.Date(fame$DOB, format = "%B %d, %Y")
dod <- as.Date(fame$DOD, format = "%B %d, %Y")
head(diff_dates(dob, dod)) # Note: Deceased people do not age further.
head(diff_dates(dob, dod, as_character = FALSE)) # numeric outputs
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.