【问题标题】:Calculate the last Friday with at least two business days left计算最后一个星期五还有至少两个工作日
【发布时间】:2014-07-29 17:11:59
【问题描述】:

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

第四个星期五很容易:

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

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

【问题讨论】:

    标签: r date datetime


    【解决方案1】:

    计算一个月的最后一天后,这相当简单,因为如果是星期二,则它是简单的 4 天减法,直到你得到 10 天(如果是星期一)。你可以用模运算来计算。

    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"
    

    【讨论】:

    • 哈哈“怪诞星期五”。感谢您的解决方案,几分钟前我刚想出了类似的东西。我选择一个初始日期(第 4 个星期五),使用 timeLastDayInMonth 函数,取一个 difftime,减去 2,如果数值小于 2,我需要抓住第三个星期五。这是可行的,因为第 5 个星期五永远不会有资格。
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2021-09-05
    • 2012-05-06
    • 2017-01-01
    相关资源
    最近更新 更多