--- title: "Creating Calendars" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Creating Calendars} %\VignetteEngine{knitr::rmarkdown} \usepackage[utf8]{inputenc} --- # Creating a calendars Use `create.calendar` with your list of holidays. ```{r, echo=FALSE, message=FALSE} library(bizdays) holidays <- calendars()[["Brazil/ANBIMA"]]$holidays ``` ```{r, message=FALSE} create.calendar( name = "MyCalendar", holidays = holidays, weekdays = c("sunday", "saturday"), adjust.from = adjust.next, adjust.to = adjust.previous ) ``` what should be considered: - calendar name: the calendar must be named `MyCalendar`. The calendar name is used in all `bizdays` functions to specify which calendar has to be used. - list of holidays: the argument `holidays` is a vector of dates (mostly used R's date-time objects: `Date`, `POSIX.ct` and `POSIX.lt`) or a character vector with and ISO formatted date (`"1976-07-12"`). - weekdays: weekdays to be treated as nonworking days (usually weekends). - date adjustment: the `bizdays` function has `from` and `to` arguments that define the interval which the amount of days has to be computed. Once `from` falls in a nonworking day it is moved to the first working day after it. Similarly, `to` is adjusted to the first working day before this date. Now you can call bizdays functions passing the calendar name. ```{r} is.bizday("2016-07-12", "MyCalendar") following("2016-09-07", "MyCalendar") bizdays("2016-07-12", "2016-10-16", "MyCalendar") ``` Of course you can assign the calendar to a variable directly and pass this variable to bizdays functions ```{r} cal <- create.calendar( name = "MyCalendar", holidays = holidays, weekdays = c("sunday", "saturday"), adjust.from = adjust.next, adjust.to = adjust.previous ) is.bizday("2016-07-12", cal) ``` But this is not expected to work that way. > #### Why define weekdays? > > I am frequently asked *Why do I have to define weekdays?* or even *Shouldn't it be `weekenddays` instead?*. > > The reason I created `weekdays`: > I want to provide a way to compute business days accordingly to any definition or satisfying any needs. > In my world, the financial industry, weekends are nonworking days, but for those who work with events, for example, mondays migth be nonworking days. > > `weekdays` defaults to `NULL` because I wanted the `Calendar()` call returned an [Actual](https://en.wikipedia.org/wiki/Day_count_convention#Actual_methods) calendar. ## Skiping weekends only (defining weekends as nonworking days) You can define whatever calendar you want, for example, a calendar without holidays where only weekdays are nonworking days. ```{r, message=FALSE} create.calendar(name = "WeekendsOnly", weekdays = c("sunday", "saturday")) ``` define only `weekdays` to weekend days. ```{r} from_dates <- "2013-01-01" to_dates <- seq(as.Date("2013-12-31"), as.Date("2020-12-31"), by = "years") bizdays(from_dates, to_dates, "WeekendsOnly") ``` ## Skiping mondays (defining mondays as nonworking days) ```{r} create.calendar(name = "EveryMonday", weekdays = "monday") from_dates <- "2013-01-01" to_dates <- seq(as.Date("2013-12-31"), as.Date("2020-12-31"), by = "years") bizdays(from_dates, to_dates, "EveryMonday") ``` ## Skip nothing (formal current days calendar) ```{r} create.calendar(name = "Actual") from_dates <- "2013-01-01" to_dates <- seq(as.Date("2013-12-31"), as.Date("2020-12-31"), by = "years") bizdays(from_dates, to_dates, "Actual") ```