如何将日期四舍五入到季度开始/结束?

Cor*_*one 9 r date rounding

我需要采用日期矢量,并且每个日期都可以获得下一季度的第一天.

(或者更确切地说,到本季度的最后一天,找到下一季度的第一天并取消关闭是我的计划)

lubridate 圆/天数到几个月,但不是四分之一

到目前为止,我发现的唯一解决方案是制作一个矢量列表从1970年到2099年的所有季度开始,然后搜索它以找到我的约会后的最短日期.很明显,这会导致严重的矢量化和扩展.

我需要能够指定年末月份(尽管年份始终从月份的1月开始)

例如

x = as.Date("2014-08-15")
RoundToQuarterStart(x, yearStarts = "March")
[1] "2014-09-01"
Run Code Online (Sandbox Code Playgroud)

从这个例子中的3月1日开始,然后Q3从9月1日开始,这是在给定日期之后的下一个季度开始.(或相当于此日期属于Q2,并于8月31日结束)

hrb*_*str 11

zoo软件包可以帮助处理与日期相关的许多事情,包括:

library(zoo)

as.yearqtr("2014-08-15", format="%Y-%m-%d")
## [1] "2014 Q3"

as.Date(as.yearqtr("2014-08-15", format="%Y-%m-%d"))
## [1] "2014-07-01"
Run Code Online (Sandbox Code Playgroud)

但是,这可能无法满足您的需求(有方法可以从这些值中推断出来).

timeDate套餐包括:

timeFirstDayInQuarter(charvec, format = "%Y-%m-%d", zone = "", FinCenter = "")
timeLastDayInQuarter(charvec, format = "%Y-%m-%d", zone = "", FinCenter = "")
Run Code Online (Sandbox Code Playgroud)

这可能使其更易于使用和调整以适应不同的Q1起始点.

  • 另请注意,该季度的最后一天是:`as.Date(as.yearqtr("2014-08-15",format ="%Y-%m-%d"),frac = 1) (7认同)

Wil*_*Wil 6

我知道这是一个旧线程,但我从最近的重复帖子中找到了我的方法。

lubridate::ceiling_date() 现在接受宿舍。