如何在两个日期之间获得所有月份?

时间:2015-09-03 10:12:17

标签: r

我想生成两个日期之间所有月份的序列。

我可以用seq.Date来实现这个目的:

start <- as.Date("2015-08-01")
end <- as.Date("2015-09-01")
seq <- seq.Date(start, end, by = "month")
[1] "2015-08-01" "2015-09-01"
format(seq, "%Y-%m")
[1] "2015-08" "2015-09"

但如果两个日期之间的时间不到一个月就会失败:

start <- as.Date("2015-08-14")
end <- as.Date("2015-09-03")
seq <- seq.Date(start, end, by = "month")
[1] "2015-08-14"
format(seq, "%Y-%m")
[1] "2015-08"

我可以用天来解决seq:

unique(format(seq.Date(start, end, by = "day"), "%Y-%m"))
[1] "2015-08" "2015-09"

但是,有一种更直接的方法可以解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:2)

由于您对这些日子不感兴趣,您可以废弃该部分日期并仅处理几个月。通过在一个月中的任意一天添加来做到这一点(我已经使用了下面的第一天,但​​只要它们是相同的,任何一天都会这样做。)

start <- as.Date("2015-08-14")
end <- as.Date("2015-09-03")

forced_start <- as.Date(paste0(format(start, "%Y-%m"), "-01"))
forced_end <- as.Date(paste0(format(end, "%Y-%m"), "-01"))

seq_dates <- seq.Date(forced_start, forced_end, by = "month")
format(seq_dates, "%Y-%m")