如何在30日使用28 ou 29作为日期列出日期?

时间:2018-04-12 16:39:22

标签: r date seq dayofmonth

我想建立一个给定月份之间某一天的月度日期列表。比如说,从2016年3月到2018年3月的所有月份都是15日。

另外,我希望像Februray的第30天一样溢出,并且#34;圆润"到那个月的最后一天(而不是3月1日或2月)。

我的代码:

m <- as.POSIXlt("2018-03-30") 
m$year <- m$year -2
wDate <- as.Date(seq(from = m , to = as.POSIXlt(m), by = "month"))

wDate
 [1] "2016-03-30" "2016-04-30" "2016-05-30" "2016-06-30" "2016-07-30" "2016-08-30" "2016-09-30" "2016-10-30" "2016-11-30" "2016-12-30" "2017-01-30" "2017-03-02" "2017-03-30" "2017-04-30"
[15] "2017-05-30" "2017-06-30" "2017-07-30" "2017-08-30" "2017-09-30" "2017-10-30" "2017-11-30" "2017-12-30" "2018-01-30" "2018-03-02" "2018-03-30"

如图所示,它代替2018-02-28,而是列出2018-03-02

如何实现所需的调整?

1 个答案:

答案 0 :(得分:0)

对于您的第一个问题( 2016年3月至2018年3月的所有15个月),您可以使用seq.Date()

m1 <- as.Date("2016-03-15")
seq.Date(from = m1, length.out = 25, by = "month")
# [1] "2016-03-15" "2016-04-15" "2016-05-15" "2016-06-15" "2016-07-15" "2016-08-15" "2016-09-15" "2016-10-15" "2016-11-15" "2016-12-15"
#[11] "2017-01-15" "2017-02-15" "2017-03-15" "2017-04-15" "2017-05-15" "2017-06-15" "2017-07-15" "2017-08-15" "2017-09-15" "2017-10-15"
#[21] "2017-11-15" "2017-12-15" "2018-01-15" "2018-02-15" "2018-03-15"

对于你的第二个请求(我希望...在Februray上的第30天,是&#34;四舍五入&#34;到那个月的最后一天)你可以使用{{1来自%m+%包的函数。

lubridate

输入m2 <- as.Date("2016-03-31") library(lubridate) m2 %m+% months(0:24) # [1] "2016-03-31" "2016-04-30" "2016-05-31" "2016-06-30" "2016-07-31" "2016-08-31" "2016-09-30" "2016-10-31" "2016-11-30" "2016-12-31" #[11] "2017-01-31" "2017-02-28" "2017-03-31" "2017-04-30" "2017-05-31" "2017-06-30" "2017-07-31" "2017-08-31" "2017-09-30" "2017-10-31" #[21] "2017-11-30" "2017-12-31" "2018-01-31" "2018-02-28" "2018-03-31" 了解详情。希望这可以帮助。