楚新元 | All in R

Welcome to R Square

用 R 计算给定日期的前一个季度的最后一天的日期

楚新元 / 2021-10-14


以前在银行上班的时候,出分析报告需要用到环比、定比、同比之类的,有时候领导比较关心较上季度末的变动情况,这就需要根据当前日期返回前一个季度的最后一天的日期,比如,今天是2021-10-14,它的前一个季度是三季度,三季度的最后一天是2021-09-30, 同理,如果当天是2019-01-11, 则返回2018-12-31。

此前这个问题我发在了统计之都上,详见:如何返回某一给定日期的前一个季度的最后一天的日期谢益辉给出了一个很棒的解答,另外他还专门写了一篇日志《论代码的句感》详细解释了代码的含义。非常感谢他的认真回复。

为了将来用到的时候方便查找,我把代码放在我的网站里,同时也分享给各位读者。

last_quarter_day = function(dates) {
  dates = as.Date(dates)
  month = as.integer(format(dates, '%m'))
  year  = as.integer(format(dates, '%Y'))
  
  quarter = ceiling(month / 3)
  day = c('12-31', '03-31', '06-30', '09-30')[quarter]
  year[quarter == 1] = year[quarter == 1] - 1 
  
  as.Date(sprintf('%d-%s', year, day))
}

下面我们测试下这个函数,感受下向量化编程的魅力。

x = c("2021-10-14", "2019-01-11")
last_quarter_day(x)
## [1] "2021-09-30" "2018-12-31"