Datekeeper Mungebit

Take input in a wide variety of date/time formats and output it in a variety of consistent formats.

Supports many types of input:
* Three different separators: YYYY/MM/DD, YYYY-MM-DD, YYYY MM DD.
* Different order: MM/DD/YYYY (but not DD/MM/YYYY -- see assumptions, below).
* Spelt out months, in different orders: "January 1, 1970", "1 Jan 1970", "1970 Jan 01"
* Two-digit years (see assumptions below): "January 1, '70", "12/11/91"
* Jumbled input: "19911211", "1991dec11", "dec111991"
* Number of days since Jan 1 1970 (e.g., 306 -> 1970-11-03)

Supports five modes for output:
* mode = `date` (default) returns an R date (e.g., 1970-01-01)
* mode = `numeric` returns number of days since Jan 1, 1970
* mode = `holiday` returns `TRUE` or `FALSE` depending on if the date is on a US Federal Holiday
* mode = `weekend` returns `TRUE` or `FALSE` depending on if the date is on a weekend
* mode = `businessday` returns `TRUE` or `FALSE` depending on if the date is on a business day

Makes six assumptions about dates:
* 12/11/1991 will be December 11, 1991 (US dates)
* two-digit years > 20 refer to 20th century ('91 refers to 1991)
* two-digit years <= 20 refer to 21st century ('14 refers to 2014)
* two-digit years will be at end (12/11/20 will refer to December 11, 1920)
* numeric strings are dates if length 8, days since 1970 otherwise
* numeric strings as dates will be YYYYMMDD

## To-do
* Handle time data (datetime) (e.g., postgresql `created_at` "YYYY-MM-DD HH:MM:SS.SSSS")
* Handle year-months as input (e.g., `S0Y2`'s "YYYYMM") (maybe see `zoo` package).
* Output as day of year (1-366), day of week (1-7), or month of year (1-12).
* ...
* Maybe be smart enough to assume 91-12-11 is in YY-MM-DD, to assume 12-31-91 is in MM-DD-YY, and  to assume 31-12-91 is in DD-MM-YY.
* Maybe spin-off into separate R package for the common good, and then just include this package in the mungebit.
Stop assigning to `output`! All R constructs return values automatically.

```R
if (nchar(input) != 8) as.Date(input, origin = '1970/1/1')
else as.Date(paste0(substring(input,0,4), '-', substring(input,5,6), '-', substring(input,7,8)))
```