Agenda


  • get current date/time
  • understand date/time classes in R
  • date arithmetic
  • timezones & daylight savings
  • date/time formats
  • date/time parsing
  • date/time components
  • create, update & verify date/time objects
  • intervals, duration and period

Prerequisites


Resources


Current Date/Time




Function Description
Sys.Date() Current Date
lubridate::today() Current Date
Sys.time() Current Time
lubridate::now() Current Time
lubridate::am() Whether time occurs in am?
lubridate::pm() Whether time occurs in pm?
lubridate::leap_year() Check if the year is a leap year?

Your Turn


  • get current date
  • get current time
  • check whether the time occurs in am or pm?
  • check whether the following years were leap years
    • 2018
    • 2016

Case Study - Data


## # A tibble: 2,466 x 3
##    Invoice    Due        Payment   
##    <date>     <date>     <date>    
##  1 2013-01-02 2013-02-01 2013-01-15
##  2 2013-01-26 2013-02-25 2013-03-03
##  3 2013-07-03 2013-08-02 2013-07-08
##  4 2013-02-10 2013-03-12 2013-03-17
##  5 2012-10-25 2012-11-24 2012-11-28
##  6 2012-01-27 2012-02-26 2012-02-22
##  7 2013-08-13 2013-09-12 2013-09-09
##  8 2012-12-16 2013-01-15 2013-01-12
##  9 2012-05-14 2012-06-13 2012-07-01
## 10 2013-07-01 2013-07-31 2013-07-26
## # ... with 2,456 more rows

Case Study


  • extract date, month and year from Due
  • compute the number of days to settle invoice
  • compute days over due
  • check if due year is a leap year
  • check when due day in february is 29, whether it is a leap year
  • how many invoices were settled within due date
  • how many invoices are due in each quarter
  • what is the average duration between invoice date and payment date

Date/Time Classes


  • Date
  • POSIXct
  • POSIXlt

ISO 8601 Format




POSIXlt



Component Description
sec Second
min Minute
hour Hour of the day
mon Month of the year (0-11
zone Timezone
wday Day of week
mday Day of month
year Years since 1900
yday Day of year
isdst Daylight saving flag
gmtoff Offset is seconds from GMT

Your Turn


R 1.0.0 was released on 2000-02-29 08:55:23 UTC. Save it as

  • Date using character
  • Date using origin and number
  • POSIXct
  • POSIXlt and extract
    • month day
    • day of year
    • month
    • zone
  • ISODate

Date Arithmetic - Course Length




Date Arithmetic - Shift Date




Your Turn


  • compute the length of a vacation which begins on 2020-04-19 and ends on 2020-04-25
  • recompute the length of the vacation after shifting the vacation start and end date by 10 days and 2 weeks
  • compute the days to settle invoice and days overdue from the receivables.csv data set
  • compute the length of employment (only for those employees who have been terminated) from the hr-data.csv data set (use date of hire and termination)

Timezones






Daylight Savings




Your Turn


  • check the timezone you live in
  • check if daylight savings in on
  • check the current time in UTC or a different time zone

Date & Time Formats


  • December 12, 2019"
  • 12th Dec, 2019
  • Dec 12th, 19
  • 12-Dec-19
  • 2019 December
  • 12.12.19

Conversion Specifications




Specification Description Example
%d Day of the month (decimal number) 12
%m Month (decimal number) 12
%b Month (abbreviated) Dec
%B Month (full name) December
%y Year (2 digit) 19
%Y Year (4 digit) 2019
%H Hour 8
%M Minute 5
%S Second 3

Your Turn


Below, we have specified July 5th, 2019 in different ways. Create the date using as.Date() while specifying the correct format for each of them.

  • 05.07.19
  • 5-July 2019
  • July 5th, 2019
  • July 05, 2019
  • 2019-July- 05
  • 05/07/2019
  • 07/05/2019
  • 7/5/2019
  • 07/5/19
  • 2019-07-05

Parse Date & Time




Date Specification
19-07-05 ymd
2019-07-05 ymd
05-07-2019 dmy
07-05-2019 mdy

Your Turn


Below, we have specified July 5th, 2019 in different ways. Parse the dates using strptime() or parse_date_time() or any other helper function.

  • July-05-19
  • JUL-05-19
  • 05.07.19
  • 5-July 2019
  • July 5th, 2019
  • July 05, 2019
  • 2019-July- 05
  • 05/07/2019
  • 07/05/2019
  • 7/5/2019
  • 2019-07-05

Date & Time Components


  • year
  • month
  • date
  • week
  • day
  • quarter
  • semester
  • hour
  • minute
  • second
  • timezone

Year, Month & Week




Function Description
year() Get year
month() Get month (number)
month(label = TRUE) Get month (abbreviated name)
month(abbr = FALSE) Get month (full name)
months() Get month
week() Get week

Day




Function Description
day Get day
mday() Day of the month
wday() Day of the week
qday() Day of quarter
yday() Day of year
weekdays() Day of week
days_in_month() Days in the month

Hour, Minute & Seconds




Function Description
hour() Get hour
minute() Get minute
second() Get second
seconds() Number of seconds since 1970-01-01

Quarter & Semester


Quarter & Semester




Function Description
quarter() Get quarter
quarter(with_year = TRUE) Quarter with year
quarter(fiscal_start = 4) Fiscal starts in April
quarters() Get quarter
semester() Get semester

Case Study - Day, Month & Year




Case Study - Data Sanitization


Let us do some data sanitization. If the due day happens to be February 29, let us ensure that the due year is a leap year. Below are the steps to check if the due year is a leap year:

  • we will extract the following from the due date:
    • day
    • month
    • year
  • we will then create a new column is_leap which will have be set to TRUE if the year is a leap year else it will be set to FALSE
  • filter all the payments due on 29th Feb
  • select the following columns:
    • Due
    • is_leap

Your Turn


Get the R release dates using r_versions() from the rversions package and tabulate the following

  • year
  • month with label
  • weekday with label
  • hour
  • and quarter

Create, Update & Verify


  • make_date()
  • make_datetime()
  • update()

Date Sequence




Function Description
from Starting date of the sequence
by End date of the sequence
to Date increment of the sequence
length.out Length of the sequence
along.with Use length of this value as length of sequence

Your Turn


R 2.0.0 was released on 2004-10-04 14:24:38. Create this date using

  • make_date()
  • make_datetime()
  • and update to 2013-04-03 07:12:36 (R 3.0.0 release date)

Interval




Shift Interval




Interval Overlap




Case Study


Let us use intervals to count the number of invoices that were settled within the due date. To do this, we will:

  • create an interval for the invoice and due date
  • create a new column due_next by incrementing the due date by 1 day
  • another interval for due_next and the payment date
  • if the intervals overlap, the payment was made within the due date

Within




Case Stduy


Let us use %within% to count the number of invoices that were settled within the due date. We will do this by:

  • creating an interval for the invoice and due date
  • check if the payment date falls within the above interval

Duration



Period



Time Length



Rounding Dates


We will explore functions for rounding dates

  • to the nearest value using round_dates()
  • down using floor_date()
  • up using ceiling_date()

Rounding Dates


The unit for rounding can be any of the following:

  • second
  • minute
  • hour
  • day
  • week
  • month
  • bimonth
  • quarter
  • season
  • halfyear
  • and year

Your Turn


  • round up R release dates to hours
  • round down R release dates to minutes
  • rollback R release dates to the beginning of the month

Connect with Us