使用 lubridate 获取一个月中的最后一个工作日

问题描述 投票:0回答:1

我正在尝试使用 lubridate 获取一个月的最后一个工作日。我试着写

> lubridate::ceiling_date(as.Date("2023-12-22"), 'month') - lubridate::wday(1)
[1] "2023-12-31"

但我得到了该月的最后一天,在本例中是星期日。我可以编写一个带有循环的函数,不断增加 wdays() 的参数,直到到达工作日,但必须有一种更简单的方法。

提前致以衷心的感谢

托马斯·飞利浦

r lubridate
1个回答
1
投票

此函数生成该月的所有日期,然后过滤到工作日并取最大值。我很想看看是否有更简单的解决方案。

library(lubridate)

last_weekday <- function(x) {
  month_days <- seq(floor_date(x, "month"), ceiling_date(x, "month") - days(1), by = "day")
  max(month_days[wday(month_days, week_start = 1) < 6])
}

last_weekday(as.Date("2023-12-22"))
# [1] "2023-12-29"
© www.soinside.com 2019 - 2024. All rights reserved.