library(tidyverse)
library(nycflights13)

# date (date - year/month/day)
# time (time - hour/minute/second)
# date-time (dttm - year/month/day/hour/minute/second)
# durations (a literal number of seconds)
# periods (such as 3 months and 2 days)
# intervals (has a starting and ending point)

today()
now()

csv <- "
  date
  01/02/15
"
read_csv(csv, col_types = cols(date = col_date("%m/%d/%y")))
read_csv(csv, col_types = cols(date = col_date("%d/%m/%y")))
read_csv(csv, col_types = cols(date = col_date("%y/%m/%d")))

ymd("2017-01-31")
mdy("January 31st, 2017")
dmy("31-Jan-2017")
ymd_hms("2017-01-31 20:11:59")
mdy_hm("01/31/2017 08:01")
ymd("2017-01-31", tz = "UTC")

flights |>
  select(year, month, day, hour, minute) |>
  mutate(departure = make_datetime(year, month, day, hour, minute))

flights_dt <- flights |>
  filter(!is.na(dep_time), !is.na(arr_time)) |>
  mutate(
    dep_time = make_datetime(year, month, day, dep_time %/% 100, dep_time %% 100),
    arr_time = make_datetime(year, month, day, arr_time %/% 100, arr_time %% 100),
    sched_dep_time = make_datetime(year, month, day, sched_dep_time %/% 100, sched_dep_time %% 100),
    sched_arr_time = make_datetime(year, month, day, sched_arr_time %/% 100, sched_arr_time %% 100)
  ) |>
  select(origin, dest, ends_with("delay"), ends_with("time"))

flights_dt |>
  filter(dep_time < ymd("20130102")) |>
  ggplot(aes(x = dep_time)) +
  geom_freqpoly(binwidth = 600)

as_datetime(today())
as_date(now())

ymd(c("2010-10-10", "hello"))

d1 <- "January 1, 2010"
mdy(d1)
col_date("%B %d, %Y")

d2 <- "2015-Mar-07"
ymd(d2)
d3 <- "06-Jun-2017"
dmy(d3)
d4 <- c("August 19 (2015)", "July 1 (2015)")
col_date("%B %d (%Y)")
mdy(d4)
d5 <- "12/30/14"   # Dec 30, 2014
mdy(d5)
d6 <- "1705"
col_date("%H%M")
make_date(d6)
d7 <- "11:15:10.12 PM"
as_datetime(d7)

datetime <- ymd_hms("2026-07-08 12:34:56")
year(datetime)
month(datetime)
mday(datetime)
yday(datetime)
wday(datetime)

flights_dt |>
  mutate(wday = wday(dep_time, label = TRUE)) |>
  ggplot(aes(x=wday)) +
    geom_bar()

floor_date()
round_date()
ceiling_date()

# compute your age
my_age <- today() - ymd("1986-11-21")
my_age
as.duration(my_age)

dseconds(15)
dminutes(10)
dhours(c(12, 24))
ddays(0:5)
dweeks(3)
dyears(1)

2 * dyears(1)
dyears(1) + dweeks(12) + dhours(15)

one_am <- ymd_hms("2026-03-08 01:00:00", tz="America/New_York")
one_am
one_am + ddays(1)

hours(c(12,24))
days(7)
years(3)
months(1:5)

10 * (months(6) + days(1))
days(50) + hours(25) + minutes(2)
years(1) / days(1)

y2023 <- ymd("2023-01-01") %--% ymd("2024-01-01")
y2024 <- ymd("2024-01-01") %--% ymd("2025-01-01")