Dates and periods

vars_to_date accepts column names or positions. Year and month produce monthly dates; year and quarter produce quarterly dates; year, month and day produce daily dates. Year alone is also supported. Month names and quarter ranges accept English and Spanish, along with Q1, T1 and I–IV labels.

Output contains date as its first column. With drop_vars = FALSE, original component values remain unchanged. .round = 'end' selects the final day of the period, including leap-year February. start or NULL selects the beginning. middle means the 15th of the month, the 15th of a quarter’s middle month, or July 1 for a year. Daily dates are not rounded.

A date column can contain Date, POSIXt, ISO dates, numeric serials, an explicit character format, or EViews periods such as 2020M02 and 2021Q04. Do not combine date with component arguments. Missing components, invalid periods and impossible calendar combinations raise errors.

The historical numeric origin remains 1900-01-01. For modern Excel serial dates, explicitly use origin = '1899-12-30': the origin does not change automatically. Cumulative quarter labels are interpreted by their ending quarter for compatibility.

library(Dmisc)
x <- data.frame(year = c(2020, 2021), month = c("Febrero", "February"))
result <- vars_to_date(x, year = "year", month = "month", drop_vars = FALSE)
print(result)
##         date year    month
## 1 2020-02-29 2020  Febrero
## 2 2021-02-28 2021 February
stopifnot(identical(result$date, as.Date(c("2020-02-29", "2021-02-28"))))
vars_to_date(data.frame(period = c("2020M02", "2021Q04")), date = "period")
##         date
## 1 2020-02-29
## 2 2021-12-31