You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用lubridate获取每月最后一个工作日?求简便实现方法

获取每月最后一个工作日的简便方法

方法一:用lubridate结合条件判断(无需循环)

先获取当月最后一天,再根据星期几直接计算需要调整的天数,全程用向量运算实现:

library(lubridate)

get_last_workday <- function(date) {
  last_day <- ceiling_date(date, "month") - days(1)
  # 根据日期的星期几调整:周日减2天,周六减1天,工作日不变
  adjust_days <- case_when(
    weekdays(last_day) == "星期日" ~ 2,
    weekdays(last_day) == "星期六" ~ 1,
    TRUE ~ 0
  )
  last_day - days(adjust_days)
}

# 测试示例
get_last_workday(as.Date("2023-12-22"))
# 输出结果:"2023-12-29"

方法二:使用bizdays包(支持自定义节假日)

如果需要考虑节假日,bizdays包的专业工具能更高效处理,同样无需循环:

library(bizdays)
library(lubridate)

# 创建仅排除周末的工作日日历
create.calendar("workdays_cal", weekdays = c("Saturday", "Sunday"))

get_last_workday <- function(date) {
  last_day <- ceiling_date(date, "month") - days(1)
  # 自动向前找到最近的工作日
  adjust.previous(last_day, "workdays_cal")
}

# 测试示例
get_last_workday(as.Date("2023-12-22"))
# 输出结果:"2023-12-29"

内容的提问来源于stack exchange,提问作者Thomas Philips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:03:11