posixtcountbetween {clock}  R Documentation 
This is a POSIXct/POSIXlt method for the date_count_between()
generic.
date_count_between()
counts the number of precision
units between
start
and end
(i.e., the number of years or months). This count
corresponds to the whole number of units, and will never return a
fractional value.
This is suitable for, say, computing the whole number of years or months between two dates, accounting for the day of the month and the time of day.
Internally, the datetime is converted to one of the following three clock types, and the counting is done directly on that type. The choice of type is based on the most common interpretation of each precision, but is ultimately a heuristic. See the examples for more information.
Calendrical based counting:
These precisions convert to a yearmonthday calendar and count while in that type.
"year"
"quarter"
"month"
Naivetime based counting:
These precisions convert to a naivetime and count while in that type.
"week"
"day"
Systime based counting:
These precisions convert to a systime and count while in that type.
"hour"
"minute"
"second"
## S3 method for class 'POSIXt'
date_count_between(start, end, precision, ..., n = 1L)
start, end 
A pair of datetime vectors. These will be recycled to their common size. 
precision 
One of:

... 
These dots are for future extensions and must be empty. 
n 
A single positive integer specifying a multiple of 
"quarter"
is equivalent to "month"
precision with n
set to n * 3L
.
An integer representing the number of precision
units between
start
and end
.
The computed count has the property that if start <= end
, then
start + <count> <= end
. Similarly, if start >= end
, then
start + <count> >= end
. In other words, the comparison direction between
start
and end
will never change after adding the count to start
. This
makes this function useful for repeated count computations at
increasingly fine precisions.
start < date_time_parse("20000505 02:00:00", zone = "America/New_York")
end < date_time_parse(
c("20200505 01:00:00", "20200505 03:00:00"),
zone = "America/New_York"
)
# Age in years
date_count_between(start, end, "year")
# Number of "whole" months between these dates. i.e.
# `20000505 02:00:00 > 20200405 02:00:00` is 239 months
# `20000505 02:00:00 > 20200505 02:00:00` is 240 months
# Since `20200505 01:00:00` occurs before the 2nd hour,
# it gets a count of 239
date_count_between(start, end, "month")
# Number of seconds between
date_count_between(start, end, "second")
# 
# Naivetime VS Systime interpretation
# The difference between whether `start` and `end` are converted to a
# naivetime vs a systime comes into play when dealing with daylight
# savings.
# Here are two times around a 1 hour DST gap where clocks jumped from
# 01:59:59 > 03:00:00
x < date_time_build(1970, 4, 26, 1, 50, 00, zone = "America/New_York")
y < date_time_build(1970, 4, 26, 3, 00, 00, zone = "America/New_York")
# When treated like systimes, these are considered to be 10 minutes apart,
# which is the amount of time that would have elapsed if you were watching
# a clock as it changed between these two times.
date_count_between(x, y, "minute")
# Lets add a 3rd date that is ~1 day ahead of these
z < date_time_build(1970, 4, 27, 1, 55, 00, zone = "America/New_York")
# When treated like naivetimes, `z` is considered to be at least 1 day ahead
# of `x`, because `01:55:00` is after `01:50:00`. This is probably what you
# expected.
date_count_between(x, z, "day")
# If these were interpreted like systimes, then `z` would not be considered
# to be 1 day ahead. That would look something like this:
date_count_between(x, z, "second")
trunc(date_count_between(x, z, "second") / 86400)
# This is because there have only been 83,100 elapsed seconds since `x`,
# which isn't a full day's worth (86,400 seconds). But we'd generally
# consider `z` to be 1 day ahead of `x` (and ignore the DST gap), so that is
# how it is implemented.
# You can override this by converting directly to systime, then using
# `time_point_count_between()`
x_st < as_sys_time(x)
x_st
z_st < as_sys_time(z)
z_st
time_point_count_between(x_st, z_st, "day")