R语言实现获取用户输入日期并计算往期对应日期
R程序:基于输入日期计算往期日期
步骤1:获取并处理用户输入日期
先获取用户输入,同时处理直接按回车的情况(默认用当前系统日期):
# 获取用户输入 input_date <- readline("请输入日期(直接回车则使用当前日期,格式如YYYY/MM/DD):") # 处理输入逻辑 if (input_date == "") { target_date <- Sys.Date() } else { # 转换为Date类型,若输入格式错误会报错,可按需添加错误捕获 target_date <- as.Date(input_date, format = "%Y/%m/%d") }
注:原示例里的
strsplit没必要保留,我们需要完整的日期字符串直接转成Date对象即可。
步骤2:计算各往期日期
可以用Base R的seq()函数实现,也能借助lubridate包简化语法:
方法1:Base R 原生实现
# 计算30天前 date_30days_ago <- seq(target_date, length = 2, by = "-30 days")[2] # 计算3个月前 date_3months_ago <- seq(target_date, length = 2, by = "-3 months")[2] # 计算6个月前 date_6months_ago <- seq(target_date, length = 2, by = "-6 months")[2] # 计算12个月前 date_12months_ago <- seq(target_date, length = 2, by = "-12 months")[2] # 计算24个月前 date_24months_ago <- seq(target_date, length = 2, by = "-24 months")[2] # 输出结果 cat("目标日期:", target_date, "\n") cat("30天前:", date_30days_ago, "\n") cat("3个月前:", date_3months_ago, "\n") cat("6个月前:", date_6months_ago, "\n") cat("12个月前:", date_12months_ago, "\n") cat("24个月前:", date_24months_ago, "\n")
方法2:lubridate包简化(更直观)
如果觉得Base R写法繁琐,用lubridate包能让代码更简洁:
# 首次使用需安装包 # install.packages("lubridate") library(lubridate) date_30days_ago <- target_date - days(30) date_3months_ago <- target_date - months(3) date_6months_ago <- target_date - months(6) date_12months_ago <- target_date - months(12) date_24months_ago <- target_date - months(24) # 输出逻辑同上
注意事项
- 日期格式:如果需要支持
YYYY-MM-DD这类格式,修改as.Date()里的format参数为"%Y-%m-%d"即可。 - 月末适配:遇到31号这类月末日期,
seq()会自动调整为对应月份的最后一天(比如2024/03/31减1个月会得到2024/02/29,因2024是闰年)。
内容的提问来源于stack exchange,提问作者user24020905
相关产品推荐
相关产品推荐

