Business dates calculations

Introduction to busdater

Working with business dates can be cumbersome and error prone. busdater aims to make it easier, by providing functionality, to get financial year, calendar year and month calculations. It returns start and end of the business periods.

Jurisdictions and organisations observe different start and end of financial year. parameter is string in the format of “MM-DD” representing the start of financial year, e.g. “01-01” for 1st of January or “07-01” for 1st of July. The default is taken from options and is “07-01” if not present.

This package caters for financial years that have a fixed start date. It does not cater for moving dates e.g. last Friday of September.

The package has 4 functions (2 deprecated):

  • get_fy to return the financial (fiscal) year as integers
  • get_boundary to return start and end of a month and start and end of financial years
  • FY deprecated and same as get_fy
  • period_boundaries deprecated and same as get_boundary

Enjoy!

Examples and explanations

get_fy function

Given the current date:

Sys.Date()
#> [1] "2024-11-11"
getOption("busdaterFYstart", default = "07-01")
#> [1] "07-01"

Return the current financial year as integer

get_fy()
#> [1] 2025

Return financial year for given dates

dt <- as.Date(c("01-01-2018", "15-12-2017"), "%d-%m-%Y")
get_fy(date = dt[1])
#> [1] 2018
get_fy(date = dt)
#> [1] 2018 2018

Return the next financial year as integer

get_fy(offset_period = 1) # current financial year + 1
#> [1] 2026
get_fy(date = dt[1], offset_period = 1)
#> [1] 2019
get_fy(date = dt, offset_period = 1)
#> [1] 2019 2019

Return the previous financial year as integer

get_fy(offset_period = -1) ## return the previous financial year as integer
#> [1] 2024
get_fy(date = dt[1], offset_period = -1)
#> [1] 2017
get_fy(date = dt, offset_period = -1)
#> [1] 2017 2017

get_boundary function

Given the current date:

Sys.Date()
#> [1] "2024-11-11"
getOption("busdaterFYstart", default = "07-01")
#> [1] "07-01"

What is the 1st day of the current financial year

get_boundary()
#> [1] "2024-07-01"
get_boundary(opt_fy_start = "07-01")
#> [1] "2024-07-01"
get_boundary(opt_fy_start = "01-03")
#> [1] "2024-01-03"

The last day of the current financial year

get_boundary(boundary = "last day")
#> [1] "2025-06-30"

The last day of the last calendar year

get_boundary(offset_period = -1, bus_period = "CY", boundary = "last day")
#> [1] "2023-12-31"

The last day of month 14 months from now

get_boundary(offset_period = 14, offset_type = "month",
                  bus_period = "M", boundary = "last day")
#> [1] "2026-01-31"

The first day of financial years for dates 3 months before the given dates

get_boundary(as.Date(c("02/27/1992", "09/28/2022"), "%m/%d/%Y"),
                  offset_period = -3, offset_type = "month",
                  bus_period = "FY", boundary = "1st day")
#> [1] "1991-07-01" "2021-07-01"