R 计算隔夜时差(开始时间为下午,结束时间为第二天上午)

R Calculating overnight time difference (when start time is PM and end time is AM of the next day)

我需要轮班开始时间和结束时间之间的小时差。开始和结束时间是 12 小时 am/pm 格式的字符串。我们可以假设开始时间都在同一日历日,但结束时间可以到第二天(夜班)。 difftime 将它们视为同一日期,导致计算方向错误的差异:如果开始时间是 7:00 下午,结束时间是 4:00 上午,则计算 9 小时班次15小时。是否可以在不创建更复杂的函数的情况下计算这些时间差?

df= structure(c("7:00 AM", "7:00 PM", "8:00 AM", "10:00 PM", 
            "4:00 PM", "4:00 AM", "5:00 PM", "6:00 AM"), .Dim = c(4L, 2L))

as.numeric(difftime(
   strptime(df[,2], "%I:%M %p" ),
   strptime(df[,1], "%I:%M %p" ),
   units='hours'))
[1]   9 -15   9 -16

我要查找的结果应该是:

[1] 9 9 9 8 

这应该可以做到。

shift.dur <- function(m){
    hours<- as.numeric(difftime(
        strptime(df[,2], "%I:%M %p" ),
        strptime(df[,1], "%I:%M %p" ),
        units='hours'))
    hours[hours<0] <- 24+hours[hours<0] 
    hours
}