计算上周五至少剩下两个工作日

时间:2014-07-29 17:12:00

标签: r date datetime

我正在尝试使用timeDate包中的一系列函数编写一个小函数,以确定每个月的最后一个星期五至少剩下两个工作日。

获得第四个星期五很简单:

> timeNthNdayInMonth("2014-11-01",nday=5,nth=4)
GMT
[1] [2014-11-28]

但是,在11月的情况下,我希望它返回2014-11-21,因为在28日之后的11月没有其他工作日。我想我需要的是某种ifelse来确定参数nth应该等于什么。

1 个答案:

答案 0 :(得分:1)

一旦你计算了一个月的最后一天,这是相当简单的,因为如果一个星期二增加一个直到你在星期一达到10天,那么它就是4天的简单减法。您可以使用模运算来计算它。

freakyFriday <- function(year,month){
    lastDay <- as.Date(paste(year+ifelse(month==12,1,0),(month%%12)+1,1,sep="-"))-1
    dayNo <- as.integer(strftime(lastDay,"%w"))
    lastDay - ((dayNo-2)%%7+4)
}

freakyFriday(2014,7)
[1] "2014-07-25"
freakyFriday(2014,11)
[1] "2014-11-21"
freakyFriday(2014,1:12)
 [1] "2014-01-24" "2014-02-21" "2014-03-21" "2014-04-25" "2014-05-23"
 [6] "2014-06-20" "2014-07-25" "2014-08-22" "2014-09-26" "2014-10-24"
[11] "2014-11-21" "2014-12-26"