如何从今天开始减去n个工作日以获得用户提示的过去日期?

时间:2018-06-10 15:31:59

标签: r

我试图从今天起计算n个工作日以获得具体日期。

我希望获得一个用户输入,其中包含向后计数的日期,让系统计算该日期。

让我们说我想从今天开始倒数100(工作日)。

A <- readline(prompt = "How many days backwards do you want to count? ")

#user input: 100

Date to be calculated <- Today date-A (format yyyy/mm/dd)

#Date to be calculated = 2018-03-02 

然后我会使用日期来获取该日期存储的数据集的某些值。

任何评论都将受到高度赞赏

1 个答案:

答案 0 :(得分:0)

一个选项是写一个递归函数来减去工作日。 chron::is.weekend函数可用于确定某一天是working-day。决定weekend/working-day的其他选项可以基于@Ryan建议的S开头的日期。

library(chron)
substractWorkingDays <- function(x, n){
  v <- seq(x, x -n, by="-1 day")
  workingDays <- sum(!is.weekend(v[-1])) #One can check day name start with `S`
  if(workingDays == n){
    return(v[length(v)])
  }else{
    substractWorkingDays(v[length(v)], n-workingDays)
  }
}

#Testing it

substractWorkingDays(as.Date("2018-06-10"), 5)
#[1] "2018-06-04"
substractWorkingDays(as.Date("2018-06-10"), 10)
#[1] "2018-05-28"
substractWorkingDays(as.Date("2018-06-10"), 12)
#[1] "2018-05-24"