Как рассчитать рабочие часы между двумя датами (язык R)? - PullRequest
0 голосов
/ 13 апреля 2019

Как рассчитать количество рабочих часов между двумя датами события: временем?

Я ищу код R, который даст мне около 9 рабочих часов (вместо 71 часа)! Как убрать часы выходных, праздничных часов из календаря и настроить рабочие часы с 8:00 до 17:00? *

Любые советы будут хорошими. Спасибо,

Date1 <- parse_date_time("2019-04-12 3:00:12 PM", order=c("%Y-%m-%d %I:%M:%S %p"), tz = "EST")

Date2 <- parse_date_time("2019-04-15 2:30:44 PM", order=c("%Y/%m/%d %I:%M:%S %p"), tz = "EST")


# This code give me roughly an answer of one day
sum(!weekdays(seq(Date1, Date2, "days")) %in% c("Saturday", "Sunday"))

# This code give me the amount of hours: 70.69 hours but include the weekend! 
round(difftime(Date2, Date1, units="hour"), 2)

Я рассчитываю получить 9 часов (рабочих часов) между пятничным мероприятием в 15:00 и заключительным мероприятием в понедельник в 14:30. (Также, исключая 1 час обеда).

1 Ответ

0 голосов
/ 14 апреля 2019

Это не относится к праздникам, но будет легко учтено при необходимости

 Date1 <- parse_date_time("2019-04-04 3:00:12 PM", order=c("%Y-%m-%d %I:%M:%S %p"), tz = "EST")

 Date2 <- parse_date_time("2019-04-15 2:30:44 PM", order=c("%Y/%m/%d %I:%M:%S %p"), tz = "EST")

 #8AM to 5PM
 sw=8
 ew=17
  df=data.frame(Day=c(seq(Date1, Date2, "days"),Date2))
 df$day=strftime(df$Day,'%A')
 df$nday=as.numeric(format(df$Day,"%u"))
 # fill hours
 df$nH=NA
 for (i in 2:nrow(df))df$nH[i]=ew-sw-1
 # exclude weekeds 
 df=df[!df$nday %in% c(6,7),]
 #adjust  first and last day
 df$nH[1]=as.numeric(ew-as.difftime(format(df$Day[1],"%H:%M:%S"),units = "hours"))
 df$nH[nrow(df)]=as.numeric(as.difftime(format(df$Day[nrow(df)],"%H:%M:%S"),units = "hours")-sw)-1
 sum(df$nH)



# > sum(df$nH)
 # [1] 55.50889
 # > df
 # Day           day nday       nH
 # 1  2019-04-04 15:00:12  quinta-feira    4 1.996667
 # 2  2019-04-05 15:00:12   sexta-feira    5 8.000000
 # 5  2019-04-08 15:00:12 segunda-feira    1 8.000000
 # 6  2019-04-09 15:00:12   terça-feira    2 8.000000
 # 7  2019-04-10 15:00:12  quarta-feira    3 8.000000
 # 8  2019-04-11 15:00:12  quinta-feira    4 8.000000
 # 9  2019-04-12 15:00:12   sexta-feira    5 8.000000
 # 12 2019-04-15 14:30:44 segunda-feira    1 5.512222
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...