How to Calculate Time Difference in R [difftime(), lubridate]

To calculate the time difference between two dates in R, you can use the built-in difftime() function.

For example:

date1 <- "2022-09-12 18:49:21"
date2 <- "2022-03-21 10:34:07"

# Time difference in days
difftime(date1, date2)

Output:

Time difference of 175.3439 days

This function supports seconds, minutes, hours, days, and weeks as the time unit. But to calculate the time difference in months or years, you should rely on a library.

This is a comprehensive guide to calculating the time difference in R.

You will learn how to use the built-in difftime() function to calculate the time difference in seconds, minutes, hours, days, and weeks. Besides, you will learn how to use the lubridate library to calculate the number of months or years between two dates.

How Does the difftime() Function Work in R?

Sample use of difftime() function in R

The easiest way to calculate time differences in R is by using the native difftime() function.

Here’s the basic syntax of the difftime() function in R:

difftime(time_start, time_end, units="days")

Where:

  • time_start is a string that represents the start date, such as “2022-05-19 11:03:43
  • time_end is a string that represents the end date, such as “2022-09-25 20:19:31
  • units is an optional argument that specifies the time units in which the difference is calculated. The default value is “days“.

Notice that the units are limited to seconds, minutes, hours, days, and weeks. To calculate the time difference in months or years, you need to use another solution (more about this later in this guide)

Calculating Time Differences in R

This section shows you how to use the difftime() function to calculate time differences in:

  • Seconds
  • Minutes
  • Hours
  • Days
  • Weeks

In addition, you learn how to use the lubridate library to calculate time differences in:

  • Months
  • Years

Let’s jump into it!

1. Calculate Time Difference in Seconds

Time difference in seconds in R

To calculate the time difference between two dates in seconds in R:

  1. Specify the start date.
  2. Specify the end date.
  3. Specify the time units as “secs“.
  4. Call the difftime() function with these three arguments.

Here’s an example:

date1 <- "2022-09-12 18:49:21"
date2 <- "2022-03-21 10:34:07"

# Time difference in seconds
difftime(date1, date2, units="secs")

Output:

Time difference of 15149714 secs

2. Calculate Time Difference in Minutes

Time difference in minutes in R

To calculate the time difference between two dates in minutes:

  1. Specify the start date.
  2. Specify the end date.
  3. Call the difftime() function with these three arguments.

Remember, the default time unit is minutes. This is why you don’t need to specify the time unit in the difftime() function call.

Here’s an example:

date1 <- "2022-09-12 18:49:21"
date2 <- "2022-03-21 10:34:07"

# Time difference in minutes
difftime(date1, date2)

Output:

Time difference of 252495.2 mins

3. Calculate Time Difference in Hours

Time difference in hours in R

To calculate the time difference between two dates in hours:

  1. Specify the start date.
  2. Specify the end date.
  3. Specify the time units as “hours“.
  4. Call the difftime() function with these three arguments.

Here’s an example:

date1 <- "2022-09-12 18:49:21"
date2 <- "2022-03-21 10:34:07"

# Time difference in hours
difftime(date1, date2, units="hours")

Output:

Time difference of 4208.254 hours

4. Calculate Time Difference in Days

Time difference in days in R

To calculate the time difference between two dates in days:

  1. Specify the start date.
  2. Specify the end date.
  3. Specify the time units as “days“.
  4. Call the difftime() function with these three arguments.

Here’s an example:

date1 <- "2022-09-12 18:49:21"
date2 <- "2022-03-21 10:34:07"

# Time difference in days
difftime(date1, date2, units="days")

Output:

Time difference of 175.3439 days

5. Calculate Time Difference in Weeks

Time difference in weeks in R

To calculate the time difference between two dates in weeks in R:

  1. Specify the start date.
  2. Specify the end date.
  3. Specify the time units as weeks.
  4. Call the difftime() function with these three arguments.

Here’s an example:

date1 <- "2022-09-12 18:49:21"
date2 <- "2022-03-21 10:34:07"

# Time difference in weeks
difftime(date1, date2, units="weeks")

Output:

Time difference of 25.04913 weeks

6. Calculate Time Difference in Months

Time difference in months in R

To calculate the time difference between two dates in months in R, you cannot use the difftime() method. This is because the difftime() function’s time units only stretch to “weeks”.

But why is that?

Calculating a time difference in months or years is tricky because the notion of year or month isn’t clearly defined.

  1. There are 28-31 days in a month.
  2. There can be either 365 or 366 days in a year due to leap years.

You could make an assumption that a month is 30 days in length. But this would cause an issue in February. For example, the time difference between 2022-02-01 and 2022-03-01 is 29 days. This is not a whole month in the 30-day-month system even though a full month has passed!

To take into account the discrepancies in the month and year lengths, I recommend using an external library whose creator has put in the hours to make dates work right.

One great way to calculate time differences in R is by using a library lubridate.

For example, let’s use the lubridate library to count the number of whole months between two dates:

library(lubridate)

first_date <- as.Date('2022-02-01')
second_date <- as.Date('2022-04-01')

diff <- interval(first_date, second_date) %/% months(1)

diff

Output:

[1] 2

This result takes into account the 28-day-long February and correctly determines the number of whole months to be 2.

7. Calculate Time Difference in Years

Time difference in years in R

When talking about time differences, a year can cause headaches. Traditionally speaking, there are 365 days in a year, while the actual number is closer to 365.25.

This fraction is important and has to be taken into account. This is why the timekeepers came up with a leap year which is a year with 366 days. The leap year is a great way to even out the extra 0.25 days but it causes a problem when calculating time differences.

For example, the time difference between two leap year dates 2020-01-01 and 2020-12-31 is 365 days. If your calculator used the number 365 as a full year, the calculator would falsely claim that a whole year has passed even though there’s still one day left.

Due to the hazy definition of year, the difftime() function cannot calculate the time difference between two dates in years.

Once again, the safest bet to calculate the number of full years between two dates is by using the lubridate library.

For example:

library(lubridate)

first_date <- as.Date('2020-12-31')
second_date <- as.Date('2020-01-01')

diff <- interval(first_date, second_date) %/% years(1)

diff

Output:

[1] 0

The lubridate library gives you the correct number of full years between two date objects.

Summary

Today you learned how to use the difftime() function in R to calculate time differences between two dates.

The R’s built-in difftime() function can calculate the time differences between two dates in:

  • Seconds (units=”secs”)
  • Minutes (units=”mins”)
  • Hours (units=”hours”)
  • Days (units=”days”)
  • Weeks (units=”weeks”)

But it cannot calculate time differences in:

  • Months
  • Years

To get the time difference in months or years, you need to use the lubridate library. This library comes with code that knows how to take into account the variable number of days in months and leap years.

Thanks for reading. Happy coding!

Read Also

Best Python Data Science Courses